溫馨提示×

如何在Java中定義泛型extends類

小樊
82
2024-09-29 22:54:16
欄目: 編程語言

在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或其子類。這意味著您可以使用IntegerDouble等類型實(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

0