我只有一个界面
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.java 和 Teacher.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)时也会发生这种情况。
在您给定的带有 Student
和 Teacher
类的示例中。假设您有一个名为 SchoolGoer
的接口(interface),并且您的 Student
和 Teacher
实现了该接口(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/