在构建和界面时,有多少个类可以实现该界面? 如果答案不止一个,那么java如何知道在调用接口时要使用哪些实现(不直接调用实现)?
答案 0 :(得分:0)
有多少个类可以实现该接口?
尽可能多的人。
如果答案不止一个,那么java如何知道在调用接口时要使用哪些实现(不直接调用实现)?
这里有助于了解late binding(也称为动态绑定)。
让我们说你有接口和类实现它像
interface Animal{
void makeSound();
}
class Cat implements Animal{
public void makeSound(){
System.out.println("mew");
}
}
class Dog implements Animal{
public void makeSound(){
System.out.println("woof");
}
}
你也有像
这样的代码Animal a1 = new Cat();
Animal a2 = new Dog();
a1.makeSound();
a2.makeSound();
您将看到的结果是
mew
woof
之所以发生这种情况,是因为方法.makeSound()
的 body / code 正在运行时(而不是编译时)查找(并调用)。这是可能的,因为每个对象都记住它的类,因此a1
引用持有的对象知道它是Cat
的实例,而a2
持有的对象是Dog
的实例。
所以,当你这么做时:
a1.makeSound();
a1
持有的对象Cat
类的实例),Cat.class
文件)并正在搜索makeSound()
的代码(如果找不到这样的方法,那么它将假定它必须被继承,它将尝试搜索它在超类)