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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 画了一个圈儿 中级黑马   /  2014-8-20 12:27  /  1343 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Outer
  2. {
  3.         private static int x = 1;
  4.         static class Inner
  5.         {
  6.                 int x = 3;
  7.                 public void method()
  8.                 {
  9.                         int x = 5;
  10.                         System.out.println("x="+x);                        //x=5
  11.                         System.out.println("x="+this.x);                //x=3
  12.                         System.out.println("x="+Outer.this.x);        //x=1
  13.                 }
  14.         }
  15.         public void function()
  16.         {
  17.                 Inner in = new Inner();
  18.                 in.method();
  19.         }
  20. }
  21. class InnerClassDemo
  22. {
  23.         public static void main(String[] args)
  24.         {
  25.                 Outer ou = new Outer();                //通过外部类成员访问内部类;
  26.                 ou.function();               
  27.         }
  28. }
复制代码
内部类的访问规则:
1、内部类可以直接访问外部类中的成员,包括私有成员。因为内部类中持有了一个外部类的引用,格式:外部类名.this
  1. class Outer
  2. {
  3.         int x = 1;
  4.         class Inner
  5.         {
  6.                 public void method()
  7.                 {
  8.                         System.out.println("x="+x);         //x=1; 这里的x相当于Outer.this.x
  9.                 }
  10.         }
  11. }
复制代码
2、外部类要访问内部类,必须建立内部类对象:
       Outer.Innerin = new Outer().new Inner();
       in.method();
内部类的访问格式:
1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象。
格式: 外部类名.内部类名 变量名 = 外部类对象.内部类对象;
              Outer.Innerin = new Outer().new Inner();
2、当内部类定义在成员位置上,就可以被成员修饰符所修饰。比如:     
private:将内部类在外部类中进行封装
       static:内部类具备了静态特性。
当内部类被static修饰后,只能直接访问外部类中的static成员,即出现了访问局限。
在外部其他类中,如何直接访问static内部类中的非static成员呢?
                     new Outer.Inner().method();
              在外部其他类中,如何直接访问static内部类中的static成员呢?
                     Outer.Inner.method();    // method()static修饰时
       注意:当内部类中定义了静态成员,该内部类必须是static修饰的。
                当外部类中的静态方法访问内部类时,内部类也必须是static的。
什么时候定义内部类:
当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事物的内容。比如bodyheart的关系,为body定义一个类,那么heart类应该定义在body类内部,并封装,只有满足一定条件时才能在外部其他类中访问heart类的成员和方法。

6 个回复

倒序浏览
借阅。。。
回复 使用道具 举报
刚好看到这。。。 感觉开发中用的不多 但是最起码要看懂
回复 使用道具 举报
nadax 发表于 2014-8-20 17:07
刚好看到这。。。 感觉开发中用的不多 但是最起码要看懂

呵呵 后面还有用到的地方,所以整理整理复习一次
回复 使用道具 举报
谢谢楼主,看着正有点晕,你这个规则看完 整个人都好了
回复 使用道具 举报
怎么没有匿名内部类的,这有点晕啊。嘿嘿 有点过分 见谅
回复 使用道具 举报
nadax 发表于 2014-8-20 17:45
怎么没有匿名内部类的,这有点晕啊。嘿嘿 有点过分 见谅

匿名内部类又发了一个帖子,格式不好调整,所以分开发的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马