Java泛型和多态性
java中的多态性是什么?我试图用泛型来理解这一点。 让我们考虑下面的类对。Java泛型和多态性,java,Java,java中的多态性是什么?我试图用泛型来理解这一点。 让我们考虑下面的类对。 public class Pair<X, Y> { public final X x; public final Y y; public Pair(X x, Y y) { this.x = x; this.y = y; } } 公共类对 { 公开决赛X X; 公共决赛; 公共对(X,Y){ 这个.x=x; 这
public class Pair<X, Y>
{
public final X x;
public final Y y;
public Pair(X x, Y y) {
this.x = x;
this.y = y;
}
}
公共类对
{
公开决赛X X;
公共决赛;
公共对(X,Y){
这个.x=x;
这个。y=y;
}
}
如果我们想实例化该类,那么我们将执行以下操作:
Pair <String, int> pair = new Pair<>("one", 1);
Pair Pair=新的一对(“一”,1);
现在因为我使用字符串和int而不是X和Y,我能说这是多态性吗?还有超类和多态性的概念。那怎么办?泛型
您在这里看到的是泛型。它与多态性无关
泛型类似于方法的参数:
public static void foo(int bar) { ... }
方法foo
希望用户在调用它时给它一些int
值。方法本身通过局部变量bar
引用该值。一个电话可能看起来像
foo(5);
foo(8);
如果你有一个泛型类,比如
public class Pair<A, B> { ... }
它的好处是编译器可以使用这些信息来确保
dogAndCar
实际上只能与Dog
和Car
一起用于A
和B
。因此,如果类有一个类似
public void setFirst(A first) { ... }
不能用错误的类型调用方法,如dogAndCar.setFirst(10)代码>。编译器知道A
是dogAndCar
的Dog
,并且不允许您将其用于任何非Dog
的对象
有关此主题的更多信息,请阅读有关泛型的说明
多态性
多态性是指一个类实现父类的功能,但覆盖其他一些功能或添加新功能的概念
让我们考虑下面的父类
public class Animal {
public void makeNoise() {
System.out.println("Hello");
}
}
现在我们扩展该类并重写该方法。此外,我们还添加了第二种方法:
public class Dog extends Animal {
@Override
public void makeNoise() {
System.out.println("wuff wuff");
}
public String getName() {
return "John";
}
}
如果我们在狗上使用makeNoise
方法,我们将看到“wuff wuff”
,而不是“Hello”
有关这方面的更多信息,请查看on多态性
请注意,您可以进一步将其分为继承和多态性。阅读更多信息。这根本不是多态性。你在这里看到的只是简单的泛型。找到一本好的书或文章来解释这些概念的深度要比这样深得多。考虑一个抽象的动物类,它有一个方法Talk()和两个具体的实现,比如狗和猫,它们以它们返回“WOFF”或“MIAU”的形式来实现它自己的版本。Polimorphism是指为动物变量指定这些类的实例。如果您为该变量分配了一个Cat实例并调用talk(),您将收到一个“Miau”,而对于一个Dog实例,您将收到“Woof”,而不必真正知道该动物变量当前包含的具体实例。您将看到一个编译器错误。您必须使用Integer
而不是int
。
public class Dog extends Animal {
@Override
public void makeNoise() {
System.out.println("wuff wuff");
}
public String getName() {
return "John";
}
}