抽象类和构造函数

3
作为一个抽象类不能被实例化,那么为什么抽象类中还允许构造函数存在呢?
public abstract class SomeClass 
 {  
     private string _label;

     public SomeClass(string label)  
     {  
         _label=label;
     }  
}

可能是 https://dev59.com/onI-5IYBdhLWcg3wxbjv#1682284 的重复问题。 - Jesse C. Slicer
1
不是询问公共构造函数的用途,而是询问构造函数的整体用途。 - thecoop
2个回答

11

任何派生类的构造函数仍然需要调用抽象类中的构造函数。如果您根本没有指定任何构造函数,那么所有派生类将只能使用编译器提供的默认无参数构造函数。

在这种情况下拥有构造函数绝对是有意义的 - 但“public”实际上与“protected”等效。


3

因为您仍然可以执行以下操作:

public class SomeChildClass : SomeClass
{
    public SomeChildClass(string label) : base(label){ }

    public string GetLabel() { return _label; }
}

正如您所看到的,子类可以调用抽象类的基本构造函数来创建自己的实例。

就像Jon所说的那样,public并不是必须的。它与protected实际上是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接