Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型和多态性_Java - Fatal编程技术网

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; 这

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;
这个。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";
    }
}