2016-04-28 18 views
-2

另一個類產生更少的特定類我有一個模型:如何從Java中

class A { 
    int a; 
    int b; 
    int c; 
} 

我想創建一個新的類,如:

class B { 
    int a; 
    int b; 
} 

我不想重寫所有屬性在類B中,這些屬性已經寫成A.如何使用A創建B.
我們可以添加額外的功能類與擴展但我們如何創建較不具體的類?有沒有這樣的模式? A類或B類應該如何設計爲更多形態?

(我想用B類用於插入數據庫,模型類和數據庫表應該是相同的)

+1

首先,你已經在類「B」中從類「A」繼承了'a'和'b'。通過定義具有相同名稱的另一個變量,不需要在類「B」中隱藏這兩個變量。最後,對我來說,這沒什麼意義,因爲遵循邏輯:當'B'從'A'繼承時,'B'自動錶示一個'A',但更具體的是'A'。所以下面只是純粹的邏輯'B'不能是不那麼具體那麼'A',因爲它繼承了它,雖然更具體然後'A' – SomeJavaGuy

+2

這是非常貧窮的面向對象的設計 – ControlAltDel

回答

-3

我猜你需要一種設計技術,像組成。

說明:如果你想在A類使用B類,你可以在A類使用B b = new B();!這是組成。 也可以實現接口,而不是類爲您提供多重繼承。 此處的語法如下: class A implements interface1, interface2

+0

這個答案是可能的如何解決這個問題,爲什麼倒票仍然在這裏? –

+0

因爲他們鏈接到外部網站沒有通過解釋在這裏。也許如果他們擴大了答案,他們可能會得到更多的讚揚。在目前的狀態下,它應該是一個評論 – Draken

+0

@Draken我同意你的看法。我會嘗試添加更多的信息給我的答案,然後看看會發生什麼.. –

0

不知道您是否可以更改類/實現,但似乎有多個解決方案。第一個是將有類A擴展類B

public class B { 
    int a; 
    int b; 
} 

public class A extends B { 
    int c; 
} 

但不回答你的核心問題(產生更少的特異性類)。

創建一個不太具體的類(或至少一些模仿的話)可以通過接口和getter/setter方法來完成,因此,例如:

public class Implementation implements A,B { 
    private int a; 
    private int b; 
    private int c; 

    public int getA(){return a;} 
    public int getB(){return b;} 
    public int getC(){return c;} 

    ... 
} 

public interface A { 
    int getA(); 
    int getB(); 
    int getC(); 
} 

public interface B { 
    int getA(); 
    int getB(); 
} 
+0

我修改了一下你的代碼,我認爲有一些小錯誤。在第一部分中,我相信你的意思是A應該擴展B,但是錯過擴展標籤。 在第二部分中,您不需要重複'getA();'和'getB();',因爲它們已經在接口'B'的使用中實現了,所以不要認爲接口是要走的路,因爲他們仍然需要在具體的類中寫出屬性。可能會更好地做一個抽象類 – Draken

+1

只要你「認爲」有一些錯誤,最好在做出自己的編輯之前要求澄清/確認。您的評論很好,如果OP迴應,應該得到很好的反饋。但現在我已經投票拒絕你的編輯。 – CubeJockey

+0

當然,試圖說清楚它是如何工作的,並不確定最佳實踐,現在我知道了。感謝您的澄清 – Draken

0

應該有一個「是」父母之間的關係和派生類。

I.e.派生類(B)也應該是其父類(A)的一個實例。

如果您從B中刪除某些東西,它就不能再成爲A了。 因此它不應該是可能的。