黑马程序员技术交流社区
标题:
内部类引用外部类成员的问题
[打印本页]
作者:
U芽Lady
时间:
2013-4-18 11:00
标题:
内部类引用外部类成员的问题
本帖最后由 U芽Lady 于 2013-4-19 07:08 编辑
class Out{
int x = 1;
class In{
int x = 2;
public void show(){
System.out.println(Out.x);
}
}
}
class Demo {
public static void main(String[] args) {
Out.In o = new Out().new In();
o.show();
}
}
---------- javac ----------
Demo.java:6: 错误: 无法从静态上下文中引用非静态 变量 x
System.out.println(Out.x);
^
1 个错误
输出完成 (耗时 1 秒) - 正常终止
为什么报这样的错呢,不是内部类可以直接应用外部的成员吗???
作者:
Miss小强
时间:
2013-4-18 11:08
内部类你可以把他当成是一个成员,既然是在成员位置上,你仔细想想看,老毕是不是讲过,静态成员不能访问非静态成员,非静态成员可以访问静态成员;
改过来Out.this.x;-------------->>System.out.println(Out.x);
因为Out.this 表示的是外部类的引用;
作者:
梁航斌
时间:
2013-4-18 11:19
System.out.println(Out.x);首先你这句话Out.x;直接类名调用x,这是静态调用啊,而你int x有没有静态static修饰。所以就报:无法从静态上下文中引用非静态 变量 x。
修改如下:
class Out{
static int x = 1;
class In{
int x = 2;
public void show(){
System.out.println(Out.x);
}
}
}
class Demo {
public static void main(String[] args) {
Out.In o = new Out().new In();
o.show();
}
}
复制代码
作者:
陈宇鹏
时间:
2013-4-18 20:03
本帖最后由 陈宇鹏 于 2013-4-18 20:04 编辑
class Out
{
int x = 1;
class In
{
int x = 2;
public void show()
{
System.out.println(Out.x);//这里不是这样调用的。这里本身默认省略了out.this., 所以这里一般直接x就能够调用外部类了
//但是当外部类,内部类的成员变量以及函数中的局部变量名一样时,调用规则是这样的
//外部类名.this.x 调用的就是外部类的成员变量
//this.x调用的就是内部类成员变量
//x 调用的就是局部的变量。
}
}
}
class Demo
{
public static void main(String[] args)
{
Out.In o = new Out().new In();
o.show();
}
}
复制代码
看//之后的
还有就是记着,内部类方法想要访问中想要访问的变量如果有多个同名,一定是默认优先访问自己所在位置中(比如局部方法,比如内部类)的变量
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2