黑马程序员技术交流社区

标题: 有关Java内部类的问题 [打印本页]

作者: 任亚俊    时间: 2013-8-7 15:38
标题: 有关Java内部类的问题
本帖最后由 任亚俊 于 2013-8-7 19:33 编辑
  1. public class Test7 {
  2.         public static void main(String[] args) {
  3.                 A a=new A();
  4.                 a.outerMethod();
  5.         }

  6. }
  7. class A {
  8.          int x = 1;
  9.          class B {
  10.                  int x = 2;
  11.                  void func() {
  12.                          int x = 3;
  13.                          System.out.println("所属外部类全局变量x="+A.this.x);
  14.                          System.out.println("内部类自身全局变量x="+this.x);
  15.                          System.out.println("内部类自身局部变量x="+x);
  16.                  }
  17.          }
  18.          void outerMethod(){
  19.                  B b=new B();
  20.                  b.func();
  21.          }
  22. }
复制代码
在上述代码中,在Test7这个类中想要访问类A的内部类B,除了通过A提高的方法外,可不可以直接访问内部类B的方法func(),如果可以怎样访问呢?

作者: 昨夜星风    时间: 2013-8-7 16:40
当内部类定义在外部类的成员位置上 而且非私有,可以在外部其他类中  可以直接建立内部类对象
格式:外部类名.内部类.变量名=外部类对象.内部类对象;
所以 在外部其他类中,可以理解这样访问非静态成员
public class Test7 {
        public static void main(String[] args) {
                new A().B().func();
        }

}
个人理解是这样访问的 ,希望共同进步
作者: 影响力147753321    时间: 2013-8-7 16:43
内部类B属于成员内部类,因为它相当于外部类的成员,只有通过外部类对象来访问。就算是提供方法也是外部类方法。其它外围类访问它。都要先建立外部类对象。内部类放在外部类内部很好得到隐藏。使外围类不能轻易访问到。
作者: 单凯    时间: 2013-8-7 17:00
public static void main(String[] args) {
           new A().new B().func();
    }
创建内部类对象,调用自己的方法
作者: 吴光新    时间: 2013-8-7 18:12
楼上正解
给你推荐内部类的访问规则:http://blog.csdn.net/jiewin/article/details/9327929
作者: 黑马龙子    时间: 2013-8-7 18:30
想要访问A类中的成员内部类B,那么需要通过外部类A的对象来进行访问,这时需要提供一个外部的方法。在外部其他类中建立一个内部类对象,进行调用。还可以类的局部位置定义一个接口。然后进行实现,调用方法。希望对你有所帮助!
  1. public class Text7 {
  2.     public static void main(String[] args) {
  3.             new A().new B().func();
  4.     }
  5. }
  6. class A {
  7.      int x = 1;
  8.      class B {
  9.              int x = 2;
  10.              void func() {
  11.                      int x = 3;
  12.                      System.out.println("所属外部类全局变量x="+A.this.x);
  13.                      System.out.println("内部类自身全局变量x="+this.x);
  14.                      System.out.println("内部类自身局部变量x="+x);
  15.              }
  16.      }
  17.      void outerMethod(){
  18.              B b=new B();
  19.              b.func();
  20.      }
复制代码

作者: 布易般    时间: 2013-8-9 11:48
在main函数中:

可以直接访问内部类B的方法,前提:外部类需要创建内部类的对象访问内部类中的成员。
  A.B  inner = (new A()).new  B();
  ------            ---------------         -----
内部类类型      外部类对象        内部类构造函数
//然后就可以通过内部类对象访问了
    inner.func();

这样就ok!         




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