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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-李勇 中级黑马   /  2012-7-4 19:11  /  1487 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
}
}

7 个回复

倒序浏览
貌似没有其他办法,要是不嫌麻烦,可以自己写个get方法获取{:soso_e113:}
回复 使用道具 举报
本帖最后由 邵阳 于 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();
}
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
什么Inner().x不行,必须是new Inner().x
回复 使用道具 举报
Inner.x也不行。提示无法从静态引用非静态变量x
为什么不能写成Outer.Inner.x
回复 使用道具 举报
邵阳 发表于 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为什么不可以
回复 使用道具 举报
将内部类改为静态的 通过类名调用
    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还有没有别的写法?
                }
        }
回复 使用道具 举报
改为这种 System.out.println("y="+new Outer().new Inner().x);//想打印4,除了this还有没有别的写法?也是可以的  内部类的成员为内部类的私有数据 外部类不能直接访问到 。而内部类可以看成是外部类的成员,所以必须通过外部类的对象调用。 newOuter()为匿名对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马