我知道这里已经有很多关于接口的答案,但我不会问任何有关接口的问题。我只是想了解下面提到的答案。
我知道什么是抽象类和接口,有什么区别&在哪里使用它们以及如何使用它们。但在看几个面试问题时,我遇到了这个问题。以这种方式回答:
“接口使得一个类中的方法可以调用其他类的对象上的方法,而无需知道这些对象的真实类,前提是这些对象都是从实现一个或多个的类实例化的。换句话说,实现指定接口的类的对象可以作为泛型类型Object传递给其他对象的方法,其他对象的方法可以通过首先将它们作为接口类型转换来调用传入对象的方法。“
现在,任何人都可以用更简单的词语解释上述答案的含义吗?
答案 0 :(得分:5)
这是一个例子。
如果您有以下动物界面:
interface IAnimal {
public void eat();
}
由以下类实现:
class Tiger implements IAnimal {
public void eat() {
System.out.println("Tiger eats antelope");
}
}
class HouseCat implements IAnimal {
public void eat() {
System.out.println("House Cat eats canned food");
}
}
然后你可以这样做:
public void whatDoesItEat(IAnimal animal) {
animal.eat();
}
Tiger tiger = new Tiger();
HouseCat houseCat = new HouseCat();
whatDoesItEat(tiger);
whatDoesItEat(houseCat);
在whatDoesItEat
中,您不必担心自己被传递的是什么类型的动物。您只关心每个实现IAnimal
接口,以便您可以调用eat()
方法。
答案 1 :(得分:2)
接口使得一个类中的方法可以调用其他类的对象上的方法,而无需知道这些对象的真实类,前提是这些对象都是从实现一个或多个指定的类实例化的。接口。
如果一个类实现了一个接口,那么任何东西都可以在该类上调用接口方法,而无需关心实际的类。例如,你可以传递物体作为 "实例"其中一个接口。
interface Fooable { void foo(); }
public class Bar implements Fooable { void foo() { System.out.println("Bar foo"); } }
public class Baz implements Fooable { void foo() { System.out.println("Baz foo"); } }
public class Plugh { void fooey(Fooable fooable) { fooable.foo(); } }
Plugh
并不关心其Fooable
的基础类型是什么。它只知道它是Fooable
。它并不关心它可能是Bar
还是Baz
。
换句话说,实现指定接口的类的对象可以作为泛型类型Object传递给其他对象的方法,而其他对象的方法可以通过首先将它们作为接口类型转换来调用传入对象的方法
你可以这样做:
void fooey(Object o) {
if (o instanceof Fooable) {
((Fooable) o).foo();
}
}
一般来说,你不会想要。
答案 2 :(得分:0)
很简单,这意味着如果你有一个接口作为参数的方法:
void someFunction(SomeInterface si)
然后你可以用任何实现该接口的类来调用它。