2012-08-11 79 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