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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 遮天 中级黑马   /  2014-6-7 09:46  /  974 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 遮天 于 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.         }
复制代码

5 个回复

倒序浏览
我觉得:
1.内部类可以直接调用外部的属性和方法,也许是因为这个同学你才这样尝试了一下,
2.但是this.调用的不是调用的外部的属性,他会调用本类的属性,但是内部类中没有这个属性,所以会出错,
3.可以调用外部属性,不代表拥有外部属性
不知这样说对吗?
回复 使用道具 举报
我这么说吧,一个内部类相当于外部类的非static成员(当然前提你的内部类是非static),那你用this.name岂不是调用了外部类的本身name吗!!!显然你将值赋给了外部类的name和age,但是你的age又没有定义
回复 使用道具 举报
this.name = name;                 this.age = age;
回复 使用道具 举报
this.name = name;
this.age = age;这句没有错

第一句错了。因为name是外部类的成员属性,要用外部类名.this.属性名来访问。即:Outer.this.name = name;
ps:this.name中this是本类对象,这个本类在本代码中表示内部类。所以找不到name变量。
回复 使用道具 举报
学习了。。楼上的大神们的各个解释都看了还是没看懂,谢谢楼主分享。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马