黑马程序员技术交流社区

标题: 内部类问题 [打印本页]

作者: 黑马刘岩    时间: 2012-12-13 10:13
标题: 内部类问题
  1. class Outer//这是外部类
  2. {

  3. private static int num=4;
  4. int n=6;


  5. void fun()//外部类成员
  6. {
  7. final int n=9;
  8. class Inner//这是内部类
  9. {
  10.   void pri()//内部类方法
  11.   {
  12.    System.out.println(Outer.this.n);//打印外部类成员变量
  13.   }
  14.   
  15. }
  16. new Inner().pri();//实例化内部类并调用内部类方法
  17. System.out.println(n);//打印内部类成员变量
  18. }

  19. }
  20. class InnerClassDemo
  21. {
  22. public static void main(String[] args)
  23. {
  24.   Outer o=new Outer();
  25.   o.fun();

  26. }
  27. }
复制代码
我这里有一个问题,可不可以把内部类的实例化放在主函数中进行?

作者: 张胜格    时间: 2012-12-13 10:55
本帖最后由 张胜格 于 2012-12-13 11:20 编辑

一般可以啊,要在外部直接使用内部类的实例化对象的一般格式为:
外部类.内部类 内部类对象=外部类实例.new内部类实例()
但是具体到这道题是不能的,因为这个内部类定义在了外部类的方法中,
只有在调用实例化外部类并调用外部类的方法时此内部类才能被看见,所以不能用上面的方法调用,
也不能在外部类定义之外的地方调用

作者: 黑马刘岩    时间: 2012-12-14 09:16
张胜格 发表于 2012-12-13 10:55
一般可以啊,要在外部直接使用内部类的实例化对象的一般格式为:
外部类.内部类 内部类对象=外部类实例.new ...

明白了,灰常感谢!
作者: Kevin123    时间: 2012-12-14 10:13
内部类可以访问包装他的外部类的所有,方法和属性,包括私有方法,但是哪怕对同一个包下面其他类来说,内部类是隐藏的,
也就是说,如果要访问内部类,就必须先要得到他的外部包装类,得到那个句柄之后在new 内部类,就可以调用他的方法了,
总之要知道,想调用内部类,就必须先实例化外部类,不然是访问不了内部类的。





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