黑马程序员技术交流社区

标题: 请教问题:关于内部类的访问方法。 [打印本页]

作者: 李征雪    时间: 2012-4-2 16:35
标题: 请教问题:关于内部类的访问方法。
  1. //Demo0902.java

  2. class Outer
  3. {
  4.         public static int num = 5;

  5.         static class Inner
  6.         {
  7.                 static void fun()
  8.                 {
  9.                         System.out.println("Inner:"+num);
  10.                 }
  11.         }
  12. }

  13. class Demo0902
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 new Outer.Inner().fun();//可以直接访问内部静态类中的方法;

  18.                 Outer.Inner oi = new Outer.Inner();//外部类.内部类().
  19.                 oi.fun();

  20.                 Outer.Inner.fun();//直接通过类名访问静态内部类中的静态函数;
  21.         }
  22. }
复制代码
请问在第20行代码中,new Outer.Inner().fun();如果改成new Outer().Inner().fun();为什么会报错(Outer多一个括号),我不太明白那个括号的作用。
  1. //Demo0904.java

  2. class Outer
  3. {
  4.         int x = 3;
  5.         void method()
  6.         {
  7.                 class Inner
  8.                 {
  9.                         void fun()
  10.                         {
  11.                                 System.out.println(Outer.this.x);
  12.                         }
  13.                 }
  14.                 new Inner().fun();
  15.         }
  16. }
  17. class Demo0904
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 new Outer().method();
  22.                 System.out.println("Hello World!");
  23.         }
  24. }
复制代码
在这段代码中第22行为什么Outer要加括号?
朋友们帮忙啊,我想知道在内部类的访问中括号有什么作用或代表什么?感觉这个和构造方法不太一样啊。
作者: 鲍亚坤    时间: 2012-4-2 17:06
带上(),new Outer().Inner().默认找的是Out类中的Inner()方法。。找不到Inner方法当然报错了。。
new Outer().method();找的是Outer类中的method()方法。。
作者: 攻城狮    时间: 2012-4-2 17:18
访问格式:1,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。可以直接建立内部类对象。格式: 外部类名.内部类名 变量名 = 外部类对象.内部类对象;       Outer.Inner in = new Outer().new Inner();
2,当内部类在成员位置上,就可以被成员修饰符所修饰。
比如,private:将内部类在外部类中进行封装。static:内部类就具备static的特性。
当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。
        在外部其他类中,如何直接访问static内部类的非静态成员呢?格式 :new Outer.Inner().function();
在外部其他类中,如何直接访问static内部类的静态成员呢?格式 :Outer.Inner.function();
作者: 攻城狮    时间: 2012-4-2 17:19
熟悉各种格式后···你便知道为什么了 建议再看下面向对象内部类讲解那部分··
作者: 李征雪    时间: 2012-4-2 17:47
呵呵,谢谢,解决了,还是由于静态成员和构造方法这边的问题,在第9天后面的视频中有讲到过。




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