2013-05-02 17 views
-3

我在接受採訪時詢問了以下問題,我很好奇學習答案。我的基類在我的代碼中每次都會改變。我如何克服這一點?

我有一個由Generator生成的基類'GeneratorBaseClass'。我被問到的問題是關於創建一個新的基類'GeneratorBaseClass2',並讓Generator在運行時進行擴展(無需更改Generator)。因此,隨着代碼

public class GeneratorBase1 { 
    public GeneratorBase1(){ 
     System.out.println("Generator Base 1 is used"); 
    } 
} 

public class Generator extends GeneratorBase1{ 

    public Generator() { 
     //will call the appropriate super class 
    } 
    public static void main(String[] args){ 
     Generator test=new Generator(); 


    } 


} 

的例子,我想有發電機拿起在運行時新GeneratorBase,所以改爲

public class GeneratorBase2 { 
    public GeneratorBase2(){ 
     System.out.println("Generator Base 2 is used"); 
    } 
} 

發生器的形式是可以改變的,但必須每當基類發生變化時都不會改變。這是關於允許在運行時選擇基類,我不想只改變「擴展....」部分

+4

您是否認真地相信它可以在運行時完成?在運行時更改繼承的需求是一種糟糕的設計! – NINCOMPOOP 2013-05-02 06:39:19

+3

停止改變你的類名然後... – NilsH 2013-05-02 06:40:14

+0

你不能在運行時在java中這樣做。我不是在這裏downvoter。 – 2013-05-02 06:41:03

回答

5

我想我在這裏最好的拍攝。這個問題雖然不明朗。爲什麼有人想要一次又一次地改變基類?這可能是因爲基類正在提供的功能在運行時發生變化。如果是這種情況,則有兩種可能的情況。

  1. 基類應該是一個接口,不過是其他。

  2. 您應該組合基礎類中的變化功能,並讓實現在運行時更改,就像您的策略設計模式的工作方式一樣。

+0

+1建議策略模式 – mbx 2013-05-02 06:53:50

+0

我可以做到這一點,不管在新的基類('T2'), 我只會在舊基類('T1')中做這些更改。 因此,我不應該對現有代碼進行任何更改.. – Aakeef 2013-05-02 07:10:47

+0

這是一個完全合理的方式來處理事情。但據我瞭解,Aakeef希望不改變發電機,並在沒有告知它的情況下讓它獲得新的T級。 T類更改爲版本控制目的 – 2013-05-02 07:28:18

相關問題