继承如何在这段代码中起作用?

问题描述 投票:-1回答:1

所以我一直在研究继承,而我偶然发现了这个程序:

public class HelloWorld {
    static class A {
        void f() { System.out.println("A"); }
    }

    static class B extends A {
        void f() { System.out.println("B"); }
    }

    static class C {
        void func(B b) { b.f(); }
    }

    static class D extends C {
        void func(A a){ a.f(); }
    }

    public static void main(String args[]) {
        ( (new D())).func( (A) (new B()));
        A a =  new B();
        a.f();
        B b = new B();
        C c = new D();
        c.func(b);
    }
}

因此,即使A和C在最后几行中以完全相同的方式实现,A的方法被B覆盖,但C不被D覆盖?该程序打印如下:乙乙B

java inheritance subclass
1个回答
0
投票

这是因为func中的方法D没有覆盖C的签名更改。

static class C {
    void func(B b) { b.f(); }
}
static class D extends C {
    void func(B a){ a.f(); }
}

这将导致方法的覆盖

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