如何解决接口和继承之间的问题

Sus*_*dal 1 java inheritance interface

我面临着困惑.请查看下面的java代码.

public interface Interface {

    public void draw();
}

public class A {

    public void draw()
    {
        System.out.println("Draw in A");
    }
}

public class B extends A implements Interface {

    @Override
    public void draw()
    {
        System.out.println("Draw in B");
    }
}


public class Main {

    public static void main(String [] args)
    {
        Interface i = new B();
        i.draw();

        A a = new B();
        a.draw();

        B b  = new B();
        b.draw();
    }
}
Run Code Online (Sandbox Code Playgroud)

对于我所有我得到相同的输出("画在B中").你能告诉我哪个draw()被调用(接口/父类)?

ars*_*jii 12

Java执行后期绑定,这意味着它是被调用的实例的方法,而不是与该类型对应的方法.

A a = new B();
^         ^
type      instance
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您只创建Binstances(new B()),因此B每次调用gets 方法,无论您将此实例分配给类型的变量A.

另请参见:动态调度