2011-06-11 81 views
-1

我想强制任何类不能创建一个新的实例,如果它继承了一个特定的基类,那么这个基类应该如何?如何防止继承类实例

+1

一个特定的或任何?如果答案是任何你可以使用'sealed'关键字。 – Kevin 2011-06-11 09:53:16

+2

那么从那个基类继承什么呢?举个例子你想做什么 – Eranga 2011-06-11 09:57:16

+0

这是无稽之谈。试着用一个例子来更好地问它。 – 2011-06-11 10:12:09

回答

1

以下代码在java中。只是为了举例

基类在构造函数上有一个异常。

public class BaseClass 
{ 
    public BaseClass() 
    { 
     throw new AssertionError(); 
    } 
} 

孩子类扩展基类,但如果你创建一个对象它会给你一个例外。

public class MainClass extends BaseClass 
{ 
    public MainClass() 
    { 

    } 

    public static void main(String[] args) { 
     MainClass c = new MainClass(); 
    } 
} 
+0

这使得无法创建此实例。你会如何使用它? – Euphoric 2011-06-11 10:21:38

+0

这是我寻找的最接近的解决方案,但我建议如果它比抛出异常更关联于设计。 作为更多的解释,我想迫使类看起来像工具类,他们应该是无状态的,他们的所有方法和属性静态,就像数学类,现在我相信我不能强制方法或属性是静态的,但至少我想确保这些类无法实例化。 简而言之,认为Math类和另一个具有相同设计的类,我如何通过继承基类来推动这些类为无状态? – akkad 2011-06-11 10:32:14

+0

你不行。基类不能规定他们的后代不能做什么,他们只能决定他们的后代必须做什么。你可以定义一个非常严格的接口,但是如果你允许继承,那么你不能阻止其他人通过多态添加额外的功能。 – 2011-06-11 11:05:42

0

你不能指定在基类中,任何派生类都是自我响应的,如果它想呈现从中派生的能力,那么你不能对它做任何事情。

0

你可以声明基类为const - 其他类不能扩展它。

0

你不能这样做。请说明你为什么要这样做。

1

你想密封你的基类。

public sealed class BaseClass 
{ 
    public BaseClass(){}; 
} 



public class SubClass : BaseClass 
{ 
    public SubClass(){}; 
} 

这将抛出一个编译器错误,因为你不能从密封基地继承。