求大神解答!

//外部类HelloWorld

public 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去掉是否可以?如果不能的话为什么?


求大神解答,在此先谢谢解答的各位了!

骑驴跑得快
浏览 1010回答 1
1回答

惫懒sloth

1.说下我的理解:内部类中可以创建静态方法,但同时内部类要转为静态内部类。具体涉及到类的加载顺序和相应的静态常量初始化。因为普通内部类是依赖外部类的,没有外部类的对象根本获取不到内部类的实例(可以把它想象成外部类的成员属性)。而java中静态方法是可以直接通过 类名.静态方法名 来拿到直接使用的(在类加载时就已经初始化了),如果你不把内部类改为静态类(想象它变成了静态量,脱离了外部类的依赖),就会违反java语法规则,因为在没有外部类的对象的情况下,无法通过 类名.静态方法名 获取那个方法。2.由于你的外部类和内部类属性重名,会发生模糊匹配,你要是想拿到外部类中的同名属性值就要加上this
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java