黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: 黑马-李勇    时间: 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