Ⅰ java 如何繼承泛型
下面一個子類繼承泛型父類的例子,可以參考一下:
//父類是一個泛型
classParent<T>{
privateTval;
publicTgetVal(){
returnval;
}
publicvoidsetVal(Tval){
this.val=val;
}
}
classChild1extendsParent<Integer>{
}
classChild2extendsParent<String>{
}
publicclassApp{
publicstaticvoidmain(String[]argv){
Child1c1=newChild1();
c1.setVal(123456);
System.out.println(c1.getVal());
Child2c2=newChild2();
c2.setVal("abcdef");
System.out.println(c2.getVal());
}
}
Ⅱ Java泛型 繼承介面相關問題
當然正確。
FifoCache是一個泛型類,V由在創建此類的實例時指定具體類型,再傳給介面中的V,而介面interface Cache<K,V>中的K已顯式指定為String類型。因此,在創建此類的實例時,介面interface Cache<K,V>中的K,V都已指定了具體的類型,當然正確。
Ⅲ 為什麼Java泛型與繼承的問題報錯
如果實現的時候沒有聲明泛型,那麼默認在實現類裡面是不存在泛型的,比如interface InterfaceC<T> {
String foo(String l);
}
public class Test implements InterfaceC {
@Override
public String foo(String l) {
return l.toString();
}
}
這時候是沒問題的,但是因為list<?>中的問號也是泛型,所以如果
interface InterfaceC<T> {
String foo(List<Integer> l);
}
public class Test implements InterfaceC {
@Override
public String foo(List<Integer> l) {
return l.toString();
}
}
這樣,那麼實現類裡面的foo方法會被認為是新方法(當然,泛型擦除後可以認為是正常的,但編譯時會認為沒有實現抽象方法)
@Override
public String foo(List l) {
// TODO Auto-generated method stub
return null;
}
而這樣就是可以的,如果實現的時候聲明了泛型的類型,那麼所有實現方法的時候把所有跟T有關的都要寫成聲明的那個類型,而list<?>因為原來就聲明了泛型類型,所以不必跟實現類中聲明的泛型類型一致,所以你的後一種方法不報錯(這一點我也覺得很牽強,希望了解的人可以解答一下)
Ⅳ 求助:java泛型的繼承與實現問題
把<week>和<year>去掉即可.這不是泛型方法的格式..
public <T> void print(T v);這里的<T>只是為了聲明T類型.
///////////////////////////////////////////////////////////
這樣寫只能算是對Override(重寫)的方法進行的Overload(重載),而並非對其進
行的Override
@Override
public <T> void print(T t){//重寫繼承自介面的方法
}
public void print(week v) {//重載print
switch(v){
case monday:... }
}
public void print(year v) {//重載print
switch(v){
case January:....
}
}
Ⅳ java中介面具有泛型,繼承的時候該怎麼處理
大部分java離得介面好像都是泛型吧?
class test implements 介面<對象(例如String,Integer等等)>
Ⅵ Java 泛型和繼承的區別
泛型是參數化類型,把運行時期可能產生的問題,提前到了編譯時期,用來保證代碼安全性!
跟繼承區別?這兩根本就不是一回事呢....
你非要把這兩個概念整在一起,那麼就有一點關聯就是如果父類帶有泛型:
子類有兩個動作可做:1:覆蓋.2:擦除
Ⅶ java泛型該怎麼深繼承 amp;怎麼獲得數組的class對象
泛型的類型是無法在運行時通過反射取得的,泛型類型在編譯成位元組碼的時候已經被虛擬機給去掉了,只是起到提示編譯器進行類型檢查的作用
用這種方法你試一試:父類:import java.lang.reflect.ParameterizedType;
public class Parent<T {
public Parent() {
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
System.out.println("type==" + type);
System.out.println("entityClass==" + type.getActualTypeArguments()[0]);
System.out.println("getOwnerType==" + type.getOwnerType());
System.out.println("getRawType==" + type.getRawType());}}子類:public class Child<T extends Parent<String {
Ⅷ Java中的泛型的問題
public BaseDao(){
Class clazz=this.getClass(); //通過當前對象(this)獲取當前類
clazz.getGenericSuperclass(); //返回當前類的父類的Type
//轉換成有泛型的ParameterizedType類
ParameterizedType parameterizedType=(ParameterizedType)clazz.getGenericSuperclass();
//上面三句其實就是為了獲取BaseDao類本身
Type[] types = parameterizedType.getActualTypeArguments();
this.type=(Class<T>)types[0];
//上面兩句是獲取運行期的泛型類型,返回給當前對象(this)的type屬性
}
Ⅸ Java 繼承泛型類後相同方法名算覆寫嗎
把<week>和<year>去掉即可.這不是泛型方法的格式.. public <T> void print(T v);這里的<T>只是為了聲明T類型. /////////////////////////////////////////////////////////// 這樣寫只能算是對Override(重寫)的方法進行的Overload(重載),而並非對其進 行的Override @Override public <T> void print(T t){//重寫繼承自介面的方法 } public void print(week v) {//重載print switch(v){ case monday:... } } public void print(year v) {//重載print switch(v){ case January:.... } }
Ⅹ Java中如何實現泛型類和泛型類之間的繼承
A1的泛型參數要有兩個,否則無法確定抽象父類的泛型。
public class inher
{
public static void main(String[] args)
{
var a1 = new A1<Child, Parent>();
a1.a = new Parent();
a1.b = new Child();
a1.a.parent = 1;
a1.b.child = 2;
System.out.println(a1.a.parent);
System.out.println(a1.b.child);
}
}
abstract class A<T>
{
public T a;
}
class A1<U extends T, T> extends A<T>
{
public U b;
}
class Parent
{
public int parent;
}
class Child extends Parent
{
public int child;
}