泛型繼承接口Demo

class GenClassDemo2 
{
public static void main(String[] args) 
{
//System.out.println("Hello World!");
SubGen<String,Integer> sg=new SubGen<String,Integer>("李四",30);
System.out.println(sg.show()+"--"+sg.show2());
sg.show4(35);
}
}
//泛型父類
class SuperGen<T1>
{
private T1 var1;
public T1 show(){
return var1;
}
public void setVar1(T1 var1){
this.var1=var1;
}
public SuperGen(T1 var1){
this.var1=var1;
}

}
//泛型接口
interface Iinfo<T2>
{
public static final String STR="Hello";  //這種可以,確定的類型。 
// public static final T2 var4=null;
//GenClassDemo2.java:28: 錯誤: 無法從靜態上下文中引用非靜態 類型變量 T2 
//T2類型,因爲final常量是跟類綁定的,累初始化的時候就確定了。但是泛型都是在引用的過程中才自由分配的
//所以泛型不能出現在接口的屬性中。只能出現在方法裏。
public void setVar4(T2 var4);
public void show4(T2 var4);
}


//泛型子類繼承父類和接口
class SubGen<T1,T2> extends SuperGen<T1> implements Iinfo<T2>
// class SubGen<T1,T2> extends SuperGen<T1> implements Iinfo<T4> 如果把T2改成T4可以嗎? 不可以!!如果繼承接口中的泛型類型,和前面T1,T2類型不匹配。
//就不行。 

//架設SubGen<T1,T2>可以繼承 抽象類或者接口Abc<T4>。 那麼SubGen代碼塊裏面必須有abcde(T4 var4)這樣的方法。 SubGen代碼塊有T4泛型,則必須標記到外邊。

//不然不識別。所以應該標爲SubGen<T1,T2,T4>才能繼承Abc<T4> 泛型類。

{
private T2 var4;
private T2 var2;
public SubGen(T1 var1,T2 var2){
super(var1);
this.var2=var2;
}

public T1 show(){
return super.show();
}
public T2 show2(){
return var2;
}
public void setVar4(T2 var4){
this.var4=var4;
}
public void show4(T2 var4){
System.out.println(var4);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章