java - 通过接口(interface)的多态性

标签 java polymorphism

我只有一个界面

public interface AA {
    public void sayHello();
}

并从一个类中实现它

public class B implements AA {

    @Override
    public void sayHello() {
        System.out.println("Hello !");
    }
}

一个类有一个参数类型为上述接口(interface)的方法

public class C {
    public void invoke(AA aa) {
        System.out.println("Invoking !");
    }
}

在我的主类中将它们构造为

public class Main {
    public static void main(String... args) {
        B b = new B();
        C c = new C();
        c.invoke(b);
    }
}

在我的控制台输出调用!

我不太了解多态性以防万一。为什么C类的invoke(AA aa)方法可以接受B类的实例?通过实现相同的接口(interface),所有类是否都相同?

举个例子:

我有 Student.javaTeacher.java 类。如果他们使用单一方法gotoSchool()实现一个接口(interface)。他们可以传递带有这两个类实现的接口(interface)的参数类型的任何方法吗?如果是这样,我可以假设 Student 类和 Teacher 类的实例是相同的吗?

请有人帮助我,我的想法有什么问题吗?我只知道当您扩展同一个类时,就会发生多态性。但我不知道如何实现接口(interface)

最佳答案

Why invoke(AA aa) method of class C can accept instance of class B ?

因为类B也实现了接口(interface)AA

Does all class are the same by implementing a same interface ?

是的。这就像拥有一个Animal界面。当您的类 Dog 实现 Animal Dog 现在 IS-A(n) Animal 。如果 Cat 实现 Animal,则 Cat 现在也 IS-A(n) Animal .

I just only know about polymorphism to extends same class. But I don't know using with Interfaces.

多态性不仅仅限于扩展类。当您实现接口(interface)时也会发生这种情况。

在您给定的带有 StudentTeacher 类的示例中。假设您有一个名为 SchoolGoer 的接口(interface),并且您的 StudentTeacher 实现了该接口(interface),现在您可以说 Student< 的每个实例Teacher IS-A SchoolGoer

您现在可以执行以下操作:

SchoolGoer aTeacher = new Teacher();
SchoolGoer aStudent = new Student();
aTeacher.goToSchool();
aStudent.goToSchool();

由于它们都实现了 SchoolGoer 接口(interface),因此它们都可以执行 SchoolGoer 所做的任何事情。在本例中goToSchool

关于java - 通过接口(interface)的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25778347/

相关文章:

java - 使用反射检查方法的返回值是否为 List<String>

java - 为什么java不允许父类的实例方法在子类中受到更多限制

java - 意外输出 NULL

swift - 多态性和 SwiftUI

java - 如何使用泛型初始化 ehCache 列表?

java - 一个线程写数据不读,多线程读数据不写

php - 如何给抽象方法的参数添加类名类型?

java - 重写 toString() 是否会导致与重写普通方法不同的行为?

java jar错误: Unable to access from command line

java - Swing JButton 的圆角 Swing 没有实际 JButton 的功能