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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大家好!我在看java基础知识练习时看到一个题,将其做了稍微改动如下:
class TD
{
int y=6;
static class Inner
{
  static int y=3;
  void show()
  {
   System.out.println(y);
  }
}
}
class TC
{
public static void main(String[] args)
{
  TD.Inner ti=new TD().new Inner();
  ti.show();
}
}
就是在静态内部类中声明了一个静态成员变量y=3,在外部类中也定义了非静态变量y=6。我想看下程序最终输出的为多少。
可是在编译时就报以下错误了:
所以我想知道这是为什么?然后要怎么改呢?求各位大神多多指教。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
  1. class TD
  2. {       
  3.         int y=6;
  4.         static class Inner
  5.         {
  6.                 static int y=3;
  7.                 void show()
  8.                 {
  9.                         System.out.println(y);
  10.                 }
  11.         }
  12. }
  13. class TC
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 TD.Inner ti= new TD.Inner();//因为内部类为静态,楼主你试试这样写
  18.                 ti.show();
  19.         }
  20. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
lwj123 + 1
hellotaomi + 1 赞一个!

查看全部评分

回复 使用道具 举报

嗯,对哦!内部类为静态了就可以用外部类类名直接调用了。且在外部类中直接访问static内部类的非静态成员时的格式就应该是:new Outer.Inter().show();  在外部类中直接访问static内部类的静态成员时的格式应该为:Outer.Inter.show(); 今早翻了下笔记忽然就明白,同样非常感谢你的帮助,谢谢!

点评

哥们一起加油  发表于 2015-3-27 10:28
回复 使用道具 举报
在外部其他类中想访问静态内部类的非静态方法:
Outter.Inner i = new Outter.Inner().show()即可
其中你可以将Outter.Inner理解为内部类的全名,因为要访问非静态的方法show()所以要创建内部类对象
new Outter.Inner()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马