【问题标题】:private constructor in abstract class scenario抽象类场景中的私有构造函数
【发布时间】:2012-08-11 04:28:26
【问题描述】:

有没有可行的解决方案在抽象类中有私有构造函数..请指教

public abstract class BaseClass
{
    private String member;

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

    ... abstract methods...
}

【问题讨论】:

标签: java constructor private private-members


【解决方案1】:

抽象类可以有一个私有构造函数。但是那个类不能被另一个类扩展。而不是在抽象类中添加静态内部类并扩展该抽象类。

 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 在这个逻辑中发现了一个漏洞,这是非常正确的 - 看看他的评论(这应该是问题的答案?)。

    【讨论】:

    • @Owl - 完全同意,但一般来说,当人们讲授或阅读 OOP 时,会有 很多 信息要传达。有时,一个基本点突然过去了,很难确定。 :)
    • 这是错误的。您可以拥有一个带有私有构造函数的抽象类,该构造函数由其中的嵌套类扩展。这实际上意味着它是一个定义(所有)其具体子类的抽象类。简单的例子:ideone.com/WyAxm
    • @yshavit - 嗯,怎么样。打的好。看起来你比另一个说同样事情的答案早了 1 分钟……
    猜你喜欢
    • 2012-07-22
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多