黑马程序员技术交流社区

标题: 新人自学,关于内部类实例化的问题,求解…… [打印本页]

作者: selectgoodboy    时间: 2013-4-17 22:29
标题: 新人自学,关于内部类实例化的问题,求解……
本帖最后由 selectgoodboy 于 2013-4-17 22:30 编辑
  1. package com.itheima;

  2. /**
  3. * 第8题:创建一个包含实例内部类的类,外部类中定义一个名为str的String字符串并初始化任意值,在内部类中定义跟外部类同种类型且同名的变量,
  4. * 并在内部类中定义一个方法,分别打印外部类和内部类的变量.
  5. */
  6. public class Test8 {
  7.         public static void main(String[] args) {
  8.                 outer a = new outer();//为何总是报错???费解
  9.          outer.inner b = a.new inner();
  10.                 b.printString();
  11.         }

  12.         class outer {
  13.                 String str = "aaa";

  14.                 class inner {
  15.                         String str = "bbb";

  16.                         void printString() {
  17.                                 System.out.println("外部类中字符串的值为:" + outer.this.str);
  18.                                 System.out.println("内部类中字符串的值为:" + this.str);
  19.                         }
  20.                 }
  21.         }

  22. }

  23. outer a = new outer();//为何总是报错???费解
复制代码

作者: HM张健    时间: 2013-4-19 18:31
额   把 outer a = new outer(); 改成Test8.outer a = new Test8().new outer();  你这是三个类嵌套啊  估计你打错大括号了  
作者: up.yfei    时间: 2013-4-20 10:51
你这所有的代码在一个类里?你这相当里  Test8类里有outer类 ,outer类里有inner类,
所以你new outer类的时候也就相当于new 内部类了,所以应该写成outer a = new Test8().new outer();
作者: lipingan0520    时间: 2013-4-20 11:05
  1. Test8.outer a = new Test8().new outer();
复制代码
如果你要创建内部类对象,这样就可以了,

没必要在创建外部类对象,因为你创建内部内后,可以直接在内部,调用外部内的方法和变量。

outer a = new outer();这行报错主要是outer内是非静态的,主函数是静态的。
作者: 高新星    时间: 2013-4-20 12:58
  1. public static void main(String[] args) {
  2.                         Test.outer a =new Test().new outer();//主函数是静态的,而outer是内部类相当于类中的成员,静态成员不能直接访问非静态成员
  3.                         outer.inner b = a.new inner();
  4.                         b.printString();
  5.                 }
复制代码

作者: 黄玉昆    时间: 2013-4-20 14:51
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢




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