//外部类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
添加回答
举报
0/150
提交
取消