A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任亚俊 中级黑马   /  2013-8-7 15:38  /  1860 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 任亚俊 于 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(),如果可以怎样访问呢?

评分

参与人数 1技术分 +2 收起 理由
滔哥 + 2

查看全部评分

6 个回复

正序浏览
在main函数中:

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

这样就ok!         
回复 使用道具 举报
想要访问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.      }
复制代码
回复 使用道具 举报
楼上正解
给你推荐内部类的访问规则:http://blog.csdn.net/jiewin/article/details/9327929
回复 使用道具 举报
public static void main(String[] args) {
           new A().new B().func();
    }
创建内部类对象,调用自己的方法

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
内部类B属于成员内部类,因为它相当于外部类的成员,只有通过外部类对象来访问。就算是提供方法也是外部类方法。其它外围类访问它。都要先建立外部类对象。内部类放在外部类内部很好得到隐藏。使外围类不能轻易访问到。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
当内部类定义在外部类的成员位置上 而且非私有,可以在外部其他类中  可以直接建立内部类对象
格式:外部类名.内部类.变量名=外部类对象.内部类对象;
所以 在外部其他类中,可以理解这样访问非静态成员
public class Test7 {
        public static void main(String[] args) {
                new A().B().func();
        }

}
个人理解是这样访问的 ,希望共同进步

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马