2012-08-11 112 views
-3

是否有任何可行的解決方案,以在抽象的私有構造class..please建議私有構造

public abstract class BaseClass 
{ 
    private String member; 

    private BaseClass(String member) 
    { 
     this.member = member; 
    } 

    ... abstract methods... 
} 
+1

那麼,你試過嗎? – 2012-08-11 04:30:26

+0

這是http://stackoverflow.com/questions/3334380/why-private-access-specifier-in-an-abstract-class-in-java-even-though-we-cannot的副本,並得到很好的回答那裏。 – gview 2012-08-11 04:38:53

回答

2

抽象類可以有一個私有構造函數。但是那個階級不能被另一個階級擴展。而不是在抽象類中添加靜態內部類並擴展該抽象類。

abstract class Base{ 
public abstract void set(); 

private Base(){ 
System.out.println("Private Constructor!"); 
} 
static class Derived extends Base{ 
public void set(){ 
System.out.println("set() method implemented!"); 
} 
} 
public static void main(String[] args){ 
new Base.Derived().set(); 
} 
} 
2

這違背了抽象類的目的:

  1. 抽象類必須被分類以供使用。

  2. 如果某個方法是私有的,那麼該子類無法看到它。

∴有效無法到達。

所以,沒有。


編輯 @yshavit已經找到了這個邏輯,這是非常真實的一個洞 - 看看他的評論(這可能應該是一個問題的答案?)。

+0

沒問題。快樂的編碼。 – Ben 2012-08-11 04:40:28

+0

@Owl - 全心全意同意,但一般來說,當人們講課或閱讀OOP時,需要傳達很多信息。有時候,一個基本觀點在過去,而且很難確定。 :) – Ben 2012-08-11 04:44:46

+0

這是錯誤的。你可以擁有一個帶有私有構造函數的抽象類,該構造函數可以通過它內部的嵌套類進行擴展。這實際上意味着它是一個定義(所有)其具體子類的抽象類。微不足道的例子:http://ideone.com/WyAxm – yshavit 2012-08-11 05:12:47