当前位置:  开发笔记 > 编程语言 > 正文

关于Java内部类的两个问题(A类{B类{}})

如何解决《关于Java内部类的两个问题(A类{B类{}})》经验,为你挑选了2个好方法。

抱歉标题不好,但我想不出更好的一个.

我有一个A类和一个B类,它是A的一个子类,就像这样:

(它实际上是否有正确的名称?是否为继承保留"子类"?)

class A {
    int i = 0;
    class B {
        int j = 1;
    }
}

class Test {
    public static void main() {
        A a = new A();
        B b = a.new B();
        A c = ??? b ??? // get "a" back
    }
}

从B可以访问A的每个属性,因此ai和bi都返回0.现在,我想知道是否有可能从b中检索A类型的原始对象,因为b包含a包含的所有内容?简单的铸造显然不能解决问题.

第二个:

class A {

    void print() {
        System.out.println("This is class A.");
    }

    class B {
        void print() {
            // <--- How to access print() of class A (like this.A.print() or smth)? 
            System.out.println("This is class B.");
        }
    }
}

你也可以在这个主题上为我提供一些很好的资源,因为到目前为止我找到一个好的资源太愚蠢了.

提前致谢.:)



1> Johannes Sch..:

似乎没有办法从外部访问外部类.但你可以这样做:

class A {
    int i = 0;
    class B {
        final A outer = A.this;
        int j = 1;
    }
}

class Test {
    public static void main() {
        A a = new A();
        A.B b = a.new B();
        A c = b.outer // get "a" back
    }
}

ClassName.this 将是与内部类的实例关联的外部类的实例.



2> madlep..:

您可以使用ParentClass.this内部类中的语法访问它.

例如

public class Outter
{
    class Inner {
        public Outter getOutter()
        {
            return Outter.this;
        }
    }

    public Inner getInner(){
        return new Inner();
    }
}

class Runner{
    public static void main(String[] args){
        Outter out = new Outter(); 
        Outter.Inner inner = out.getInner();

        System.out.println(inner.getOutter().toString());
    }
}

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有