超级只超过一级吗?

问题描述 投票:0回答:3

如果我有:

class Zero {
    int n = 0;

    void setN(int x) {
        n += x;
    }
}

class One extends Zero {
    int n = 1;

    void setN(int x) {
        n += x;
        super.setN(x);
    }

}

class Two extends One {
    int n = 2;

    void setN(int x) {
        n += x;
        super.setN(x);
    }

    void show() {
        System.out.println(n);
        System.out.println(super.n);
        // System.out.println(super.super.n);   error

    }

    public static void main(String[] args) {
        Two two = new Two();
        two.show();
        // >>>
        // 2
        // 1

        two.setN(1);
        two.show();
        // >>>
        // 3
        // 2
    }
}

我重新编辑了它,用setNZero传下来的方法。它有效,所以它是否意味着我仍然可以'改变'n中的Zero,但我只是不会看到它?

同样非常有趣的是,即使setNOne中的Two完全相同,我必须手动覆盖它,如果我在setN中删除Two,这将表现不同。 setN不会改变n中的Two

似乎super只能超过一级?反正把n称为零吗?

但另一个问题是,如果我打算在子类中覆盖int n,为什么它允许我在父母中访问n

谢谢,

java multiple-inheritance
3个回答
1
投票

在Java中,与使用范围分辨率支持它的C ++不同,它是不可能的。

你可以有一个方法

int getZeroN(){
    return n;
}

在你的Zero,然后使用来自System.out.println(super.getZeroN());Two来调用它


1
投票

但是,您可以在Two.main()中执行此操作:

   Two two = new Two();
   Zero z = (Zero)two;
   System.out.println( Zero's n is " + z.n );

0
投票

你不能用super升级两级。它也可以用于参数。作为super(argument1),它将调用接受argument1类型的1个参数的构造函数(如果存在)。

它也可用于从父级调用方法。 super.method()

有关更多信息,请参阅here

© www.soinside.com 2019 - 2024. All rights reserved.