在Java中,泛型和接口是實現(xiàn)多態(tài)的兩種主要方法。下面分別介紹這兩種方法:
泛型類允許你在類定義時指定一個或多個類型參數(shù)。這些類型參數(shù)可以在類的方法和屬性中使用。當(dāng)你創(chuàng)建一個泛型類的實例時,可以為這些類型參數(shù)提供具體的類型。這樣,你可以使用相同的泛型類來創(chuàng)建不同類型的對象,從而實現(xiàn)多態(tài)。
例如,假設(shè)你有一個泛型類Box<T>
,它可以存儲任何類型的對象。你可以創(chuàng)建一個Box<Integer>
實例來存儲整數(shù),以及一個Box<String>
實例來存儲字符串。這就是多態(tài)的體現(xiàn)。
public class Box<T> {
private T item;
public void set(T item) {
this.item = item;
}
public T get() {
return item;
}
}
public class Main {
public static void main(String[] args) {
Box<Integer> intBox = new Box<>();
intBox.set(42);
System.out.println("Integer: " + intBox.get());
Box<String> strBox = new Box<>();
strBox.set("Hello, world!");
System.out.println("String: " + strBox.get());
}
}
接口是一種定義行為的契約,它允許你創(chuàng)建多個實現(xiàn)該接口的類。這些類可以具有相同的方法簽名,但可以實現(xiàn)不同的功能。通過使用接口,你可以實現(xiàn)多態(tài),因為你可以將一個接口類型的變量分配給實現(xiàn)該接口的任何類的實例。
例如,假設(shè)你有一個接口Drawable
,它定義了一個名為draw
的方法。你可以創(chuàng)建多個實現(xiàn)Drawable
接口的類,如Circle
和Rectangle
。然后,你可以創(chuàng)建一個Drawable
類型的變量,并將其分配給Circle
或Rectangle
的實例,從而實現(xiàn)多態(tài)。
public interface Drawable {
void draw();
}
public class Circle implements Drawable {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
public class Rectangle implements Drawable {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
}
public class Main {
public static void main(String[] args) {
Drawable shape = new Circle();
shape.draw(); // 輸出 "Drawing a circle"
shape = new Rectangle();
shape.draw(); // 輸出 "Drawing a rectangle"
}
}
總之,Java中的泛型和接口是實現(xiàn)多態(tài)的兩種重要方法。通過使用它們,你可以編寫更靈活、可擴展和可重用的代碼。