我的程序中有以下代码
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时,它成功构建,并且包含其他两种方法的错误已经消失。如果子类是抽象类,则不需要定义至少一个抽象方法吗?
答案 0 :(得分:2)
如果将方法标记为 printf("Node#%d.string = '%s', .next = '%d' \n",startN->next->key, startN->next->string, startN->next->key);
^^^^^^ ^^^
,则意味着继承它的每个(具体)类必须提供一个实现 - 它是一个与接口实现类似的合同是契约。
如果您将子类标记为public class DataAccessRegistry : Registry {
public DataAccessRegistry() {
For<IWidget>().Singleton().Use<DefaultWidget>();
}
}
,则表示它可以将实现推迟到其子类。
答案 1 :(得分:0)
它编译得很好,因为子类也是抽象。
这意味着为了实例化该类型的对象,您仍然需要有一个第三类(至少)继承自您的子类并实现完整的接口(来自父类的缺少的抽象方法) )。
您提供的类层次结构在实现所有必需方法的类之前无法实例化 - 这将是可以实例化的内容。
答案 2 :(得分:0)
不,这不是必要的,因为抽象类只包含方法头,并且抽象基类中的其他方法头被继承。
答案 3 :(得分:0)
不 - 您可以在没有任何抽象方法的情况下声明类摘要。对于该类的实例存在概念上可能没有任何意义,或者您可能希望确保只能实例化该类的子类(无论出于何种原因)