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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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();//为何总是报错???费解
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

正序浏览
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
  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.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. Test8.outer a = new Test8().new outer();
复制代码
如果你要创建内部类对象,这样就可以了,

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

outer a = new outer();这行报错主要是outer内是非静态的,主函数是静态的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你这所有的代码在一个类里?你这相当里  Test8类里有outer类 ,outer类里有inner类,
所以你new outer类的时候也就相当于new 内部类了,所以应该写成outer a = new Test8().new outer();

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
额   把 outer a = new outer(); 改成Test8.outer a = new Test8().new outer();  你这是三个类嵌套啊  估计你打错大括号了  

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马