C# C中作为抽象类的子类#
我的程序中有以下代码C# C中作为抽象类的子类#,c#,.net,C#,.net,我的程序中有以下代码 public abstract class test { public abstract void test1(); public abstract void test2(); public abstract void test3(); } public abstract class class1 :test { public override void test1()
public abstract class test
{
public abstract void test1();
public abstract void test2();
public abstract void test3();
}
public abstract class class1 :test
{
public override void test1()
{
string s = "";
}
}
当我将我的子类的类型更改为abstract时,它构建成功,并且包含其他两个方法的错误消失了。如果子类是抽象类,则无需定义至少一个抽象方法?它编译得很好,因为子类也是抽象的 这意味着,为了实例化该类型的对象,您仍然需要第三个类(至少)从子类继承并实现完整接口(父类中缺少的抽象方法)
只有在有一个类实现了所有必需的方法之前,才能实例化您所呈现的类层次结构—这是可以实例化的。不,这不是必需的,因为抽象类只包含方法头是可以的,而抽象基类中的其他方法头将被继承。如果将方法标记为
抽象
,则意味着继承它的每个(具体)类都必须提供一个实现——这是一个契约,与接口实现是契约类似
如果您还将子类标记为
抽象
,这意味着它可以将实现推迟到其子类。否-您可以在不使用任何抽象方法的情况下声明类抽象。该类的实例存在在概念上可能没有任何意义,或者您可能希望确保只能实例化该类的子类(无论出于何种原因)Eh。抽象类也可以包含实现。@DigiFriend可以,但不必。它们还可以只包含方法头;)我澄清了我的帖子。但只要它没有子类,它就不应该编译对吗?此外,这将允许从其他类调用静态方法。那么拥有抽象类有什么意义呢?@user1357872很抱歉,我不理解你评论中的第一个问题,但回答最后一个问题,抽象类的意义与接口的意义非常相似——此外,你可以将一些实现写入抽象类,但不能写入接口。