【发布时间】:2011-01-01 19:44:16
【问题描述】:
我们有一个这样的类:
class LogAnalyzer
{
protected IExtensionManager manager;
public LogAnalyzer()
{
GetManager();
}
protected virtual void GetManager()
{
manager = new FileExtensionManager();
}
}
我们派生出另一个这样的类:
class TestableLogAnalyzer:LogAnalyzer
{
protected override void GetManager()
{
this.manager = new StubExtensionManager();
}
}
当我们实例化子类时,OOP 规则中应该发生什么?虚拟或被覆盖的方法是否被调用,为什么?我在 C# 中对其进行了测试,并且覆盖的方法有效,但我怀疑它在解释语言中可能是相反的。这是真的吗?
【问题讨论】:
-
一篇非常受欢迎的文章,从 C++ 的角度回答了这个特定问题:artima.com/cppsource/nevercall.html
-
@John Saunders:我想知道是否所有 OO 语言都以同样的方式做这件事。阅读 AraK 发布的文章后,我发现情况并非如此。
标签: oop language-agnostic inheritance overriding virtual-functions