在Java中,要定義一個(gè)泛型類并使其繼承自另一個(gè)泛型或非泛型類,可以使用extends
關(guān)鍵字
首先,我們定義一個(gè)泛型接口Shape
:
public interface Shape<T> {
double getArea();
double getPerimeter();
}
接下來,我們定義一個(gè)泛型類Rectangle
,它繼承自Shape
接口,并指定泛型參數(shù)T
必須是Number
或其子類:
public class Rectangle<T extends Number> implements Shape<T> {
private T width;
private T height;
public Rectangle(T width, T height) {
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width.doubleValue() * height.doubleValue();
}
@Override
public double getPerimeter() {
double widthValue = width.doubleValue();
double heightValue = height.doubleValue();
return 2 * (widthValue + heightValue);
}
}
在這個(gè)例子中,Rectangle
類限制了泛型參數(shù)T
必須是Number
或其子類。這意味著您可以使用Integer
、Double
等類型實(shí)例化Rectangle
類,但不能使用非數(shù)值類型。
以下是如何使用Rectangle
類的示例:
public class Main {
public static void main(String[] args) {
Rectangle<Integer> integerRectangle = new Rectangle<>(4, 5);
System.out.println("Integer Rectangle Area: " + integerRectangle.getArea());
System.out.println("Integer Rectangle Perimeter: " + integerRectangle.getPerimeter());
Rectangle<Double> doubleRectangle = new Rectangle<>(4.5, 5.5);
System.out.println("Double Rectangle Area: " + doubleRectangle.getArea());
System.out.println("Double Rectangle Perimeter: " + doubleRectangle.getPerimeter());
}
}
輸出:
Integer Rectangle Area: 20
Integer Rectangle Perimeter: 18
Double Rectangle Area: 24.75
Double Rectangle Perimeter: 23.0