在Java中,泛型和接口是實現多態的兩種主要方法。下面分別介紹這兩種方法:
泛型類允許你在類定義時指定一個或多個類型參數。這些類型參數可以在類的方法和屬性中使用。當你創建一個泛型類的實例時,可以為這些類型參數提供具體的類型。這樣,你可以使用相同的泛型類來創建不同類型的對象,從而實現多態。
例如,假設你有一個泛型類Box<T>
,它可以存儲任何類型的對象。你可以創建一個Box<Integer>
實例來存儲整數,以及一個Box<String>
實例來存儲字符串。這就是多態的體現。
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());
}
}
接口是一種定義行為的契約,它允許你創建多個實現該接口的類。這些類可以具有相同的方法簽名,但可以實現不同的功能。通過使用接口,你可以實現多態,因為你可以將一個接口類型的變量分配給實現該接口的任何類的實例。
例如,假設你有一個接口Drawable
,它定義了一個名為draw
的方法。你可以創建多個實現Drawable
接口的類,如Circle
和Rectangle
。然后,你可以創建一個Drawable
類型的變量,并將其分配給Circle
或Rectangle
的實例,從而實現多態。
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中的泛型和接口是實現多態的兩種重要方法。通過使用它們,你可以編寫更靈活、可擴展和可重用的代碼。