为了账号安全,请及时绑定邮箱和手机立即绑定

求大神解答!

求大神解答!

骑驴跑得快 2015-11-29 16:25:21
//外部类HelloWorldpublic class HelloWorld{        //外部类的私有属性name    private String name = "imooc";        //外部类的成员属性    int age = 20;     //成员内部类Inner public class Inner { String name = "爱慕课";        //内部类中的方法 public static void show() {  System.out.println("外部类中的name:" +HelloWorld.this.name); System.out.println("内部类中的name:" +name); System.out.println("外部类中的age:" + age); } }     //测试成员内部类 public static void main(String[] args) {                //创建外部类的对象 HelloWorld o = new HelloWorld ();                 //创建内部类的对象 Inner inn = o.new Inner();                //调用内部类对象的show方法 inn.show(); }}以上为源代码,我有两个问题:1、内部类中可以创建静态方法么?如果能为什么我在内部类中的show方法的void前加上static显示错误?2、上述的show方法内的第一条输出语句中HelloWorld.this.name中的this去掉是否可以?如果不能的话为什么?求大神解答,在此先谢谢解答的各位了!
查看完整描述

1 回答

已采纳
?
惫懒sloth

TA贡献14条经验 获得超0个赞

1.说下我的理解:

内部类中可以创建静态方法,但同时内部类要转为静态内部类。具体涉及到类的加载顺序和相应的静态常量初始化。因为普通内部类是依赖外部类的,没有外部类的对象根本获取不到内部类的实例(可以把它想象成外部类的成员属性)。而java中静态方法是可以直接通过 类名.静态方法名 来拿到直接使用的(在类加载时就已经初始化了),如果你不把内部类改为静态类(想象它变成了静态量,脱离了外部类的依赖),就会违反java语法规则,因为在没有外部类的对象的情况下,无法通过 类名.静态方法名 获取那个方法。

2.由于你的外部类和内部类属性重名,会发生模糊匹配,你要是想拿到外部类中的同名属性值就要加上this

查看完整回答
反对 回复 2015-11-29
  • 1 回答
  • 0 关注
  • 1009 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信