哪位高手能根据这道题讲解一下关于内部类的知识吗?谢谢
20、根据理解,填充下面代码中第3行的内部类描述,下列选项正确的有( )。
public class OuterClass {
private double d1 = 1.0;
//在此处插入代码
}
A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}
这道题的答案选CE
------解决方案--------------------A,B 非静态内部类是不能有静态方法的。
D 在静态内部类中,不可以访问外问非静态变量
------解决方案--------------------1L已经说了
非static内部类需要外部类的实例才能实例化,所以非static内部类带有static的声明都是非法的,因为static不需要实例(也就是static里不能用this)而非static内部类本身需要外部类实例(也就是非static内部类隐含带有外部类.this指针),所以相矛盾,所以AB错
同样的,static内部类是不需要外部类实例的,即static内部类本身没有隐含带有外部类.this,所以不能直接访问外部类的非static属性或方法,return d1相当于return 外部类.this.d1,所以矛盾,所以D也是错的
------解决方案--------------------总的来说就是静态的不能调用非静态的,因为静态的不需要实例化而非静态的需要实例化才能调用