2012-10-05 37 views
0

E.g.正在訪問被認爲反模式的父類的子類

public abstract class Foo 
{ 
    public Bar f1() 
    { 
     return new Bar(); 
    } 
} 

public class Bar extends Foo 
{ 

} 

從設計上來看,你同意這樣的設計是反模式?

+0

你爲什麼要這麼做?事實上,Child類總是在父類創建後添加的。因此,在不知道哪個類是Child的情況下,您無法訪問您的子類......通常,Parent不能訪問Child的屬性。 –

+0

是的,這可能是一個壞主意。我並不確切知道你在做什麼,但我希望有更好的辦法。 –

+4

這不是創建工廠功能的好方法嗎?在抽象類中使用靜態函數來返回子類似乎是一個足夠體面的設計。 – Lalaland

回答

1

是的。

它壞的原因是因爲它破壞了封裝。如果有人改變Foo,他們意識到他們可能會改變所有的子類。如果有人更改Bar,他們不應該考慮改變其超類;其超級班應該工作相同,無論Bar的內容如何。