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.
另请参见:动态调度