我在下面有一个基类(A),我总是希望继承自
class A
{
abstract protected int foo();
public int foo2()
{
//do some stuff
foo();
}
}
这不起作用,因为我在非抽象类中没有抽象方法。但是我怎样才能实现以下目标:
继承A类的类已经实现了foo2但是继承的类必须实现foo吗? foo2最好是可以覆盖的。
更新:A类不一定是非抽象的
答案 0 :(得分:2)
只需将类A
抽象化即可。抽象类可以实现一些方法。
使foo2()
为虚拟,然后从A
派生的类可以覆盖它。
答案 1 :(得分:1)
我希望你有充分的理由不让A
抽象。更改现有非抽象类行为的首选方法是inject该行为。
interface IFoo
{
int Foo();
}
class A
{
private IFoo foo;
public A(IFoo foo)
{
this.foo = foo;
}
public int Foo2()
{
//...
return foo.Foo();
}
}
答案 2 :(得分:0)
您在构建项目时会收到错误 你不能在非抽象类中定义抽象方法
例外
Error 1 ' .A.foo()' is abstract but it is contained in non-abstract class