黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: 余善航    时间: 2013-1-17 14:19
标题: 内部类
class Outer{
class Inner{
  void show(){
   System.out.println("Inner show");
  }
}
static void method(){
  Inner s=new Inner();   // 这为什么不能创建内部类的对象         
  s.show();
  
}
}
public class aa {
public static void main(String[] args) {
  Outer c=new Outer();
  c.method();
}
}
/*
随着类的加载,method()方法就存在了,在主函数中也创建外部类的对象 ,
外部类调用静态method(),
在method()中 为什么不能创建内部类的对象

访问内部类非静态方法需要创建内部类的对象,
创建内部类的对象前,必须先加载外部类
而在主函数中也创建了外部类的对象,

听完视频没懂
*/

作者: 希望的曙光    时间: 2013-1-17 14:27
静态方法,只能调用静态类

作者: 王溢君    时间: 2013-1-17 14:29
创建内部类对象。Outer.Inner i =new Outer().new Inner();写法为:外部类.内部:。
视频一遍没看懂,建议多看几遍,自己动手运行改进,再调试。把没明白的地方弄明白。
作者: 王溢君    时间: 2013-1-17 14:30
纯手机手写,累啊
作者: 张敬培    时间: 2013-1-17 16:54
在内部类中,内部类能调用外部类的所有属性和方法,但是外部类想要调用内部类的属性和方法,就只能通过创建内部类的对象。
静态的方法只能调用静态的属性和方法,当内部类的属性为非静态时,外部类中的静态方法,无法为非静态的内部类创建对象。
下面是我学内部类时,写的一段代码,觉得写的听清楚的
  1. class Outer {
  2.         private int a=10;
  3.        
  4.         public void outer1() {
  5.                 //创建内部类的对象
  6.                 Inner nb = new Inner();
  7.                 //调用没不累的方法
  8.                 nb.inner();
  9.         }
  10.         private static void outer2() {
  11.                 System.out.println("你好");
  12.         }

  13.         private class Inner {
  14.                 public  int b = 14;//无法定义静态的属性和方法
  15.                 public  void inner() {
  16.                         System.out.println(a);//外部类的属性
  17.                         System.out.println(b);
  18.                         outer2();//可以调用外部类的所有方法方法
  19.                 }
  20.         }
  21.        
  22. }

  23. public class Test{

  24.         public static void main(String[] args) {
  25.                 Outer no = new Outer();
  26.                 no.outer1();
  27.         }
  28. }
复制代码

作者: 高浩    时间: 2013-1-18 14:25
你的method方法被静态修饰后出现了局限性,值能访问静态的成员。




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