日期:2014-05-20  浏览次数:20747 次

哪位高手能根据这道题讲解一下关于内部类的知识吗?谢谢
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也是错的

------解决方案--------------------
总的来说就是静态的不能调用非静态的,因为静态的不需要实例化而非静态的需要实例化才能调用