public interface Flyer{
public void makeFly(); // <- method without implementation
}
public class Bird extends Abc implements Flyer{
public void doAnotherThing(){
}
@Override
public void makeFly(){ // <- implementation of Flyer interface
}
// Flyer does not have toString() method or any method from class Object,
// no method signature collision will happen here
}
多重继承场景: 我们来看一下 A 类,b 类,c 类,a 类有字母表() ,方法,b 类也有字母表() ,方法。现在 C 类扩展了 A,B,我们正在为子类创建对象,也就是 C 类,所以 C ob = new C () ; ,然后如果你想调用这些方法 ob.alphabet () ; ,哪个类方法采用?是 A 类方法还是 B 类方法?所以在 JVM 层次上出现了歧义问题。因此,Java 不支持多重继承。
public class Bank {
public void printBankBalance(){
System.out.println("10k");
}
}
class SBI extends Bank{
public void printBankBalance(){
System.out.println("20k");
}
}
在编译这个之后,看起来像:
public class Bank {
public Bank(){
super();
}
public void printBankBalance(){
System.out.println("10k");
}
}
class SBI extends Bank {
SBI(){
super();
}
public void printBankBalance(){
System.out.println("20k");
}
}
class Car extends Bank {
Car() {
super();
}
public void run(){
System.out.println("99Km/h");
}
}
class SBICar extends Bank, Car {
SBICar() {
super(); //NOTE: compile time ambiguity.
}
public void run() {
System.out.println("99Km/h");
}
public void printBankBalance(){
System.out.println("20k");
}
}