内部类的构造问题
bwin娱乐下载
bwin娱乐下载
当前位置 : bwin娱乐下载 > bwin娱乐下载

内部类的构造问题

package test;

import test.A.B;

public class Test extends A.B.C {

    public TestB b, String str {
        b.superstr;
        //System.out.println" * " + b;
    }


    public static void mainString[] args {
        // TODO Auto-generated method stub
        A.B b = new A"A1".new B"B2";
        Test test = new Testb, "C3";
    }

}

class A {
    AString str {
        System.out.printlnstr;
    }
    class B {
        BString str {
            System.out.printlnstr;
        }
        class C {
            CString str {
                System.out.printlnstr;
            }
        }
    }
}

弄不懂,为什么Test中直接super不可以,而要使用B的实例b调用super。
另外super的结果为什么是构造了C呢?

从这个例子来看,你在Test中直接调用super构造是不可以的,因为C是B的一个非静态类,也就是说,要构造C,你必须提供一个B的实例,就像前一句 A.B b = new A"A1".new B"B2"; 一样,要构造B,必须使用A的实例,而不能直接 A.B b = new A.B"B2";。 而因为 Test 位于 B 之外,所有直接继承 A.B.C 是无法实现构造的,所以就有了这里例子中很巧妙办法,通过在构造函数中传递 B 的实例,将 Test 的构造交给实例 B 来完成,这样就可以实现构造了。

另外,这里 b.super 的调用,并不是调用了 b 的父类的构造方法,而是任然是调用 Test 的父类的构造方法(也就是 C 的构造方法),所以结果就是构造了 C 。这个形式与常规类的继承构造略有不同,理解上要做区分。

栏目列表

广告位

bwin娱乐下载