黑马程序员技术交流社区

标题: 静态和非静态方法访问静态与非静态内部类 [打印本页]

作者: as604049322    时间: 2014-12-20 21:00
标题: 静态和非静态方法访问静态与非静态内部类
毕老师说:  
  注意:当内部类中定义了静态成员,该内部类必须是static的。
          当外部类中的静态方法访问内部类时,内部类也必须是static的。
我认为第2条可以被打破,new Outer().new Inner2().show();这样的代码静态方法也可以访问非静态内部类的。
  1. class Outer
  2. {
  3.     private int x = 3;

  4.    
  5.     static class Inner1//静态内部类
  6.     {
  7.         static void function()
  8.         {
  9.             System.out.println("static inner1 show,x="+new Outer().x);
  10.         }
  11.     }

  12.     class Inner2//非静态内部类(内部类)
  13.     {
  14.         void show()
  15.         {
  16.             System.out.println("inner2 show,x="+x);
  17.         }
  18.     }

  19.     public static void method1()//静态方法
  20.     {
  21.         Inner1.function();//访问本类中的静态内部类
  22.         new Outer().new Inner2().show();//访问本类中的内部类
  23.     }
  24.     public void method2()//方法
  25.     {
  26.         Inner1.function();//访问本类中的静态内部类
  27.         new Inner2().show();//访问本类中的内部类
  28.     }

  29. }
  30. class  InnerClassDemo
  31. {
  32.     public static void main(String[] args)
  33.     {
  34.         Outer.method1();//运行其他类的静态方法
  35.         new Outer().method2();//运行其他类的非静态方法

  36.         Outer.Inner1.function();//运行其他类中的静态内部类的方法
  37.         new Outer().new Inner2().show();//运行其他类中的内部类的方法
  38.     }
  39. }
复制代码


作者: lwj123    时间: 2014-12-21 09:05
你打错了 吗?new Outer().new Inner2():是Inner2内部类对像,然后你用inner2调用本对象中的show方法访问Outer的x成员,不涉及你说到的“静态方法也可以访问非静态内部类的”
作者: as604049322    时间: 2014-12-21 10:33
lwj123 发表于 2014-12-21 09:05
你打错了 吗?new Outer().new Inner2():是Inner2内部类对像,然后你用inner2调用本对象中的show方法访问Ou ...

我想我的表达有问题,我想说的是静态方法也可以访问非静态内部类的方法,当然访问非静态内部类的成员变量也可以。
作者: as604049322    时间: 2014-12-21 10:38
lwj123 发表于 2014-12-21 09:05
你打错了 吗?new Outer().new Inner2():是Inner2内部类对像,然后你用inner2调用本对象中的show方法访问Ou ...

毕老师的意思是, method1()方法不能调用Inner2中的show()方法




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