coolchock:
私は、次のコードを持っています:
public class Inheritance {
class A<T,U,V>{
}
class B<T,U,V> extends A<T,U,T>{
}
}
誰かがそれが実際にどのように動作するか、私に説明してもらえますか?クラスBは、パラメータが "T、U、T" である、またはそれが実際A "T、U、V" クラスを拡張するだけのクラスを拡張していますか?
kuceraf:
実際の例にそれを入れてみましょう:
public class Inheritance {
public static class A<T,U,V>{
T t;
U u;
V v;
A(T t, U u, V v) {
this.t = t;
this.u = u;
this.v = v;
}
T getT() {return t;}
U getU() {return u;}
V getV() {return v;}
}
public static class B<T,U,V> extends A<T,U,T>{
public B(T t, U u, V v) {
super(t, u ,t);
}
}
public static void main(String[] args) {
B<Boolean, Integer, String> b = new B<>(false, 1, "string");
// 't' attribute is Boolean
// since type parameter T of class B is Boolean
Boolean t = b.getT();
// 'v' attribute is Boolean
// since type parameters T and V of class A must have the same type as
// type parameter T of class B
Boolean v = b.getV();
}
}
基本的に、クラスBは、(3つの汎用のparamsを有している)クラスA延びています。宣言することでB<T,U,V> extends A<T,U,T>
あなただけのBの最初のパラメータの同じタイプのA初とAの第三ジェネリックのparamをバインド
クラスBのコンストラクタの例に示すように、我々は、3つの異なるタイプがある - ブール値、整数、文字列を、しかし、クラスAの第一と第3回のコンストラクタのparamが両方ブール型にバインドされているので、クラスAのコンストラクタで、我々は唯一の2つの異なるタイプのブール、整数を持っていますタイプ
より多くのジェネリックと継承にここで見つけることができます:https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html