黑马程序员技术交流社区

标题: 求解一个关于内部类的问题 [打印本页]

作者: 莫嘉伟    时间: 2013-1-3 20:12
标题: 求解一个关于内部类的问题

public class test1 {
private int outProp=9;
class Inner
{
  private int inProp=10;
  public void acessOutProp(){
   System.out.println("外部类的outProp值:"+outProp);
   
  }
}
public void accessInnerProp(){
  //外部类不能直新年好访问非静态内部类的实例Field
  //下面代码不能通过编译
  //System.out.println("内部类的inProp值:"+inProp);
  System.out.println("内部类的inProp值:"+new Inner().inProp);
}
public static void main(String[] args){
  test1 out=new test1();
  out.accessInnerProp();
  
}
}
代码是上面的,我有点不解的是,内部类在一个类中的地位其实应该跟其他Field一样,既然现在定义的是非静态内部类,那这个非静态内部类应该是属于实例而不属于类,可是外部类对象却不能访问非静态内部类的private成员,感觉有点像不能访问自已的Field一样,但通过创建一个内部类的对象却可以访问了,其实看起来这个private成员它属于内部类对象,同时也属于外部类对象啊,求大神解答一下,说下理解,最好说说就是在创建这个外部类对象的时候,有没有有为非静态内部类开辟内存进行存储。

作者: 马志军    时间: 2013-1-3 20:34
1如果存在一个内部类对象,因为它在外部里里面,一定有一个外部类对象,所以内部类可以访问外部类
2当有了外部类对象时,这对象里面却不一定有非静态内部类对象存在,可能内部类还不存在呢,所以你无法直接用内部类的属性。必须先创建一个非静态内部类对象,显式地创建了对象后才能去使用它的成员。
作者: 肖志锋    时间: 2013-1-3 20:56
内部类的创建需要一个外部类对象,而不是外部类名,当你创建这个内部类后,前提条件就是外部对象的存在。所以它就会获得这个外部类的引用了,然后利用这个引用,就可以访问外部类的所有。
至于说外面为什么不能直接访问里边的,还是按老毕的图纸汽车的说法,类只是图纸,对象还没存在呢,你如何调用呢?除非是静态的,也就是嵌套类才行。
作者: 何竹冬    时间: 2013-1-3 21:21
你好
内部类相当于它所属外部类的成员,而内部类中的属性变量是内部类的成员。
所以外部类不可以直接访问内部类的成员,要创建内部类所属的外部类对象来实例化内部类后才可以访问内部类成员。
作者: 黄锦成    时间: 2013-1-3 21:44
内部类和普通的属性还是有点区别的
作者: 冉世友    时间: 2013-1-3 23:08
内部类可以访问外部类的成员和方法,是因为内部类在外部类的里面,已指定了外部类实例对象

反之,访问非静态的内部类里的成员和方法时,也要得到该内部类的实例对象啊,非静态内部类
就需要new个实例对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2