public abstract class Television
{
public abstract void TurnOn();
public abstract void TurnOff();
protected abstract void Draw();
}
然后每个公司都有自己的实施 .
public sealed class MyTelevision
: Television
{
public override void TurnOn()
{
Console.WriteLine("Turn on my tv");
}
public override void TurnOff()
{
Console.WriteLine("Turn off my tv");
}
protected override void Draw()
{
// code here.
}
}
3 回答
出于同样的原因,您需要对象中的公共方法:)您只是不知道此阶段的特定实现 . 它在具有非常高抽象级别的类中很常见,例如中间件 .
编辑:这是100%合法 . 您只需要确保它是您希望在每个具体实现中向世界其他地方公开的功能 . 入口点方法(例如:start,execute,parse ..)通常都是这种方法 .
这取决于你想要达到的目标 . 例如,您有一个
Television
类,它有3个方法,TurnOn
,TurnOff
和Draw
.您只希望客户端
TurnOn
或TurnOff
电视,但只有其子类应该知道屏幕上的内容和方式Draw
. 所以,Television
看起来或多或少会像下面那样 .然后每个公司都有自己的实施 .
客户可以
TurnOn
或TurnOff
一台电视机但屏幕上不能有任何东西Draw
.Abstract Class本身必须像继承它的Classes一样可访问 . 因此,如果继承的Classes是Public,则Abstract Class也必须是公共的 .
Public Abstract与其他公共方法具有相同的想法:如果你有一个抽象类,你将传递这个arround . 因此,如果此方法应该从外部调用,那么它是公开的 . 如果该方法仅用于Child和Parent之间的通信,则保护是可行的方法 . 简单的示例,请参阅Main-Method作为抽象类的用户: