黑马程序员技术交流社区
标题:
内部类
[打印本页]
作者:
黑马-李勇
时间:
2012-7-4 19:11
标题:
内部类
class Outer
{
private int x=3;
class Inner
{
int x=4;
void function()
{
int x=6;
System.out.println("x="+x);
System.out.println("x="+this.x);//想打印4,除了this还有没有别的写法?
}
}
void method()
{Inner in=new Inner();
in.function();}
}
class demo
{
public static void main(String[] args)
{ Outer out=new Outer();
out.method();
}
}
作者:
范俊
时间:
2012-7-4 19:25
貌似没有其他办法,要是不嫌麻烦,可以自己写个get方法获取{:soso_e113:}
作者:
邵阳
时间:
2012-7-4 19:30
本帖最后由 邵阳 于 2012-7-4 19:41 编辑
我给你提供了三种方法
1:
把this换成new Inner()
2:
class Outer
{
private int x=3;
class Inner
{
int x=4;
void function()
{
int y=this.x;
int x=6;
System.out.println("x="+x);
System.out.println("x="+
y
);//想打印4,除了this还有没有别的写法?
}
}
void method()
{Inner in=new Inner();
in.function();}
}
class demo
{
public static void main(String[] args)
{ Outer out=new Outer();
out.method();
}
}
3:
class Outer
{
private int x=3;
class Inner
{
int num=4;
void function()
{
int x=6;
System.out.println("x="+x);
System.out.println("x="+
num)
;//
想打印4,除了this还有没有别的写法?
}
}
void method()
{Inner in=new Inner();
in.function();}
}
class demo
{
public static void main(String[] args)
{ Outer out=new Outer();
out.method();
}
}
作者:
黑马-李勇
时间:
2012-7-5 10:10
什么Inner().x不行,必须是new Inner().x
作者:
黑马-李勇
时间:
2012-7-5 10:51
Inner.x也不行。提示无法从静态引用非静态变量x
为什么不能写成Outer.Inner.x
作者:
黑马-李勇
时间:
2012-7-5 10:57
邵阳 发表于 2012-7-4 19:30
我给你提供了三种方法
1:把this换成new Inner()
2:class Outer
对于第一种方法不理解,为什么不能写成Outer.Inner.x
能给解释下第一个方法吗?
既然this可以换成new Inner()
那Outer.this.x换成Outer.(new Inner()).x为什么不可以
作者:
涂金哲
时间:
2012-7-5 11:34
将内部类改为静态的 通过类名调用
static class Inner
{
static int x=4;
void function()
{
int x=6;
System.out.println("x="+x);
System.out.println("y="+Outer.Inner.x);//想打印4,除了this还有没有别的写法?
}
}
作者:
涂金哲
时间:
2012-7-5 11:47
改为这种 System.out.println("y="+new Outer().new Inner().x);//想打印4,除了this还有没有别的写法?也是可以的 内部类的成员为内部类的私有数据 外部类不能直接访问到 。而内部类可以看成是外部类的成员,所以必须通过外部类的对象调用。 newOuter()为匿名对象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2