在Java中,泛型的extends
關鍵字和接口之間有一定的關系,但它們之間有一些區別。下面分別介紹它們之間的關系:
extends
關鍵字:泛型extends
關鍵字用于限制泛型類型參數的上界。它表示泛型類型參數必須是給定類型或其子類型。這有助于確保類型安全,并避免在運行時出現ClassCastException
。例如:
public class GenericBox<T extends Number> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
在這個例子中,GenericBox
類是一個泛型類,它的類型參數T
必須是Number
類或其子類。這意味著GenericBox
可以用于任何Number
類型,如Integer
、Double
等,但不能用于非Number
類型。
接口是Java中的一種抽象類型,它定義了一組方法,但不提供實現。接口可以繼承其他接口或類,以實現多重繼承。接口中的方法默認是public abstract
的,這意味著實現接口的類必須提供這些方法的具體實現。例如:
public interface Shape {
double getArea();
double getPerimeter();
}
在這個例子中,Shape
接口定義了兩個方法:getArea()
和getPerimeter()
。實現Shape
接口的類必須提供這兩個方法的具體實現。
extends
與接口的關系:泛型extends
關鍵字和接口之間的關系在于,泛型類型參數可以使用接口作為其上界。這意味著泛型類型參數必須是給定接口的實現類或其子類。這有助于確保類型安全,并避免在運行時出現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();
}
}
在這個例子中,GenericShape
類是一個泛型類,它的類型參數T
必須是Drawable
接口的實現類或其子類。這意味著GenericShape
可以用于任何實現了Drawable
接口的類,如Circle
、Rectangle
等,但不能用于未實現Drawable
接口的類。