Java泛型extends與接口的關(guān)系如何

小樊
81
2024-09-29 22:58:17

在Java中,泛型的extends關(guān)鍵字和接口之間有一定的關(guān)系,但它們之間有一些區(qū)別。下面分別介紹它們之間的關(guān)系:

  1. 泛型extends關(guān)鍵字:

泛型extends關(guān)鍵字用于限制泛型類型參數(shù)的上界。它表示泛型類型參數(shù)必須是給定類型或其子類型。這有助于確保類型安全,并避免在運(yùn)行時(shí)出現(xiàn)ClassCastException。例如:

public class GenericBox<T extends Number> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

在這個(gè)例子中,GenericBox類是一個(gè)泛型類,它的類型參數(shù)T必須是Number類或其子類。這意味著GenericBox可以用于任何Number類型,如Integer、Double等,但不能用于非Number類型。

  1. 接口:

接口是Java中的一種抽象類型,它定義了一組方法,但不提供實(shí)現(xiàn)。接口可以繼承其他接口或類,以實(shí)現(xiàn)多重繼承。接口中的方法默認(rèn)是public abstract的,這意味著實(shí)現(xiàn)接口的類必須提供這些方法的具體實(shí)現(xiàn)。例如:

public interface Shape {
    double getArea();
    double getPerimeter();
}

在這個(gè)例子中,Shape接口定義了兩個(gè)方法:getArea()getPerimeter()。實(shí)現(xiàn)Shape接口的類必須提供這兩個(gè)方法的具體實(shí)現(xiàn)。

  1. 泛型extends與接口的關(guān)系:

泛型extends關(guān)鍵字和接口之間的關(guān)系在于,泛型類型參數(shù)可以使用接口作為其上界。這意味著泛型類型參數(shù)必須是給定接口的實(shí)現(xiàn)類或其子類。這有助于確保類型安全,并避免在運(yùn)行時(shí)出現(xiàn)ClassCastException。例如:

public interface Drawable {
    void draw();
}

public class GenericShape<T extends Drawable> {
    private T shape;

    public void setShape(T shape) {
        this.shape = shape;
    }

    public void drawShape() {
        shape.draw();
    }
}

在這個(gè)例子中,GenericShape類是一個(gè)泛型類,它的類型參數(shù)T必須是Drawable接口的實(shí)現(xiàn)類或其子類。這意味著GenericShape可以用于任何實(shí)現(xiàn)了Drawable接口的類,如CircleRectangle等,但不能用于未實(shí)現(xiàn)Drawable接口的類。

0