黑马程序员技术交流社区
标题:
编译创建内部类的对象时报错
[打印本页]
作者:
hellotaomi
时间:
2015-3-26 23:09
标题:
编译创建内部类的对象时报错
大家好!我在看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。我想看下程序最终输出的为多少。
可是在编译时就报以下错误了:
M_G0N$`L0B%ZK8(%}AW6A0G.png
(1.86 KB, 下载次数: 29)
下载附件
2015-3-26 23:04 上传
所以我想知道这是为什么?然后要怎么改呢?求各位大神多多指教。
作者:
何剑钟
时间:
2015-3-26 23:17
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.Inner();//因为内部类为静态,楼主你试试这样写
ti.show();
}
}
复制代码
作者:
hellotaomi
时间:
2015-3-27 10:12
何剑钟 发表于 2015-3-26 23:17
嗯,对哦!内部类为静态了就可以用外部类类名直接调用了。且在外部类中直接访问static内部类的非静态成员时的格式就应该是:new Outer.Inter().show(); 在外部类中直接访问static内部类的静态成员时的格式应该为:Outer.Inter.show(); 今早翻了下笔记忽然就明白,同样非常感谢你的帮助,谢谢!
作者:
lwj123
时间:
2015-3-27 11:10
在外部其他类中想访问静态内部类的非静态方法:
Outter.Inner i = new Outter.Inner().show()即可
其中你可以将Outter.Inner理解为内部类的全名,因为要访问非静态的方法show()所以要创建内部类对象
new Outter.Inner()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2