黑马程序员技术交流社区

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

作者: 遮天    时间: 2014-6-7 09:46
标题: 内部类问题
本帖最后由 遮天 于 2014-6-12 16:19 编辑
  1. /*

  2.         内部类

  3. */

  4. class Outer        //声明外部类
  5. {
  6.         private String name;

  7.         class Inner        //声明内部类
  8.         {
  9.                 int age;

  10.                 Inner(String n, int a)
  11.                 {
  12.                         name = n;
  13.                         age = a;
  14.                 }

  15.                 void function()
  16.                 {
  17.                         System.out.println("姓名:"+name+"____年龄:"+age);
  18.                 }
  19.         }

  20.         void method()
  21.         {
  22.                 Inner in = new Inner("脚本小子", 12);
  23.                 in.function();
  24.         }
  25. }

  26. class Demo
  27. {
  28.         public static void main(String[] args)
  29.         {
  30.                 Outer o = new Outer();
  31.                 o.method();
  32.         }
  33. }




  34.         为什么内部类的构造函数写成下面的情况时会错?不懂求解......

  35.         Inner(String name, int age)
  36.         {
  37.                 this.name = name;
  38.                 this.age = age;
  39.         }
复制代码

作者: 王琪    时间: 2014-6-7 10:06
我觉得:
1.内部类可以直接调用外部的属性和方法,也许是因为这个同学你才这样尝试了一下,
2.但是this.调用的不是调用的外部的属性,他会调用本类的属性,但是内部类中没有这个属性,所以会出错,
3.可以调用外部属性,不代表拥有外部属性
不知这样说对吗?
作者: woshihq    时间: 2014-6-7 10:32
我这么说吧,一个内部类相当于外部类的非static成员(当然前提你的内部类是非static),那你用this.name岂不是调用了外部类的本身name吗!!!显然你将值赋给了外部类的name和age,但是你的age又没有定义
作者: 谭荣强    时间: 2014-6-8 04:31
this.name = name;                 this.age = age;
作者: 谭荣强    时间: 2014-6-8 04:35
this.name = name;
this.age = age;这句没有错

第一句错了。因为name是外部类的成员属性,要用外部类名.this.属性名来访问。即:Outer.this.name = name;
ps:this.name中this是本类对象,这个本类在本代码中表示内部类。所以找不到name变量。
作者: EDDY_Liang    时间: 2014-6-8 09:14
学习了。。楼上的大神们的各个解释都看了还是没看懂,谢谢楼主分享。。




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