Java界面概念

时间:2016-05-04 17:34:56

标签: java interface

在构建和界面时,有多少个类可以实现该界面? 如果答案不止一个,那么java如何知道在调用接口时要使用哪些实现(不直接调用实现)?

1 个答案:

答案 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();
  • JVM接受a1持有的对象
  • 然后询问关于它的类的对象(在这种情况下,它会知道它是Cat类的实例),
  • 然后它将访问该类(Cat.class文件)并正在搜索makeSound()的代码(如果找不到这样的方法,那么它将假定它必须被继承,它将尝试搜索它在超类)
  • 当它找到这个方法时,它将从中调用代码。