2014-03-06 36 views
0

我有一個類,我想創建一個自己的類的返回實例的抽象方法。
例如...
返回類的實例的抽象方法

public abstract class A { 
......... 
public abstract Object getInstance(); 
} 


public class B extends A { 
@Override 
public Object getInstance() { 
    return this; 
    } 
} 


public class C extends A { 
@Override 
public Object getInstance() { 
    return this; 
    } 
} 

上面的代碼,方法getInstance()不能強迫返回子類BC的實例。這是我獲得它的重點。我怎麼能創建一個抽象方法強制返回子類的實例?

+0

是否想在第二個例子中返回'B'或'A'或第二個例子中的'C'或'A'?它根本不清楚。 –

+0

@JarrodRoberson我只想讓每個'A'的子類都有一個方法來返回他們自己的實例。例如......類「C」有一個返回對象'類C'和B,D,E的方法。 – Cataclysm

+0

**爲什麼**你想這樣做我不知道,這是沒有邏輯的意義,你必須有一個參考對象開始調用'.getInstance();'它只返回你相同的參考你已經擁有了。 *你要求的是沒有功能的目的。* –

回答

1

你在找什麼是通用的方法:

public class Q22213940 
{ 
    public static void main(String[] args) 
    { 
     final B b = new B(); 
     final C c = new C(); 

     System.out.println("b = b.getInstance() " + b == b.getInstance()); 
     System.out.println("c = c.getInstance() " + c == c.getInstance()); 
    } 

    public static class C extends A 
    { 
     @Override 
     public C getInstance() 
     { 
      return this; 
     } 
    } 

    public static class B extends A 
    { 
     @Override 
     public B getInstance() 
     { 
      return this; 
     } 
    } 

    public abstract static class A 
    { 
     public abstract <T> T getInstance(); 
    } 
} 

爲什麼?這不起作用。

爲什麼你想這樣做我不知道,這是沒有道理的,你必須有一個引用該對象的名稱開頭,稱爲.getInstance();,它只返回你已有的相同引用。

+0

是的,我相信..這是我的答案。感謝偉大的教學。這是解決我的問題的最佳方式。謝謝。 – Cataclysm

0

你爲什麼不返回抽象類A本身?

public abstract class A { 
    ......... 
    public abstract A getInstance(); 
} 
+0

我有一個父類,並且有很多子類。但我需要強制創建一個方法來返回它的實例。 – Cataclysm

0

public abstract B getInstance();

實現在一類這種方法將允許IS-A B返回的任何代碼。這是一種協變式返回,其中返回類型可以是類類型或類類型的子類。所以,因爲c-A通過繼承B時,由於C來自B.

延伸,一類可以重寫此方法,像這樣,這將包括C類的一個實例:

public class C extends A { 

     public B getInstance(){ 
      return new C(); // return a C object 
     } 

    } 
0

因爲A是抽象的,你可以不創建它的一個實例。下面的代碼將強制子類實現自己的實現。

public abstract class A { 
    ............ 
    public abstract A getInstance(); 

} 
相關問題