有人能用简单的语言解释这个复杂的答案吗?

jljoyd4f  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(278)

我知道这里已经有很多关于接口的答案,但是我没有问任何关于接口的问题。我只是想理解下面提到的答案。
我知道什么是抽象类和接口,有什么区别,在哪里使用它们,以及如何使用它们。但是在看一些面试问题时,我遇到了这样一个问题,答案是这样的:
接口使一个类中的方法可以调用其他类的对象上的方法,而不需要知道这些对象的真实类,只要这些对象都是从实现一个或多个指定接口的类示例化的。换句话说,实现指定接口的类的对象可以作为泛型类型对象传递到其他对象的方法中,其他对象的方法可以通过首先将传入对象转换为接口类型来调用它们的方法。”
现在谁能用更简单的语言解释一下上面的答案是什么意思?

jecbmhm3

jecbmhm31#

很简单,这意味着如果有一个方法将接口作为参数:

void someFunction(SomeInterface si)

然后可以用实现该接口的任何类调用它。

zpf6vheq

zpf6vheq2#

接口使得一个类中的方法可以调用其他类的对象上的方法,而不需要知道这些对象的真实类,前提是这些对象都是从实现一个或多个指定接口的类示例化的。
如果一个类实现了一个接口,任何东西都可以调用该类上的接口方法,而不必关心实际的类是什么。e、 例如,可以将对象作为其某个接口的“示例”传递。

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` .
换句话说,实现指定接口的类的对象可以作为泛型类型对象传递到其他对象的方法中,而其他对象的方法可以通过首先将传入对象转换为接口类型来调用它们的方法。
你可以这样做:

void fooey(Object o) {
if (o instanceof Fooable) {
((Fooable) o).foo();
}
}

一般来说,你不会想的。
m0rkklqb

m0rkklqb3#

下面是一个例子。
如果您有以下动物界面:

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() 方法。

相关问题