【发布时间】:2012-01-03 10:23:40
【问题描述】:
从 Java 的角度来看,我惊讶地发现您只能覆盖具有 virtual 关键字的基本方法。 在 Java 中,您使用 final 关键字来声明一个方法不能被覆盖。
我的想法是,您很少希望禁止覆盖,以便有人可以按照他们认为合适的方式扩展您的类。
所以在 C++ 中,如果您觉得有人可能希望在某个阶段从您的类继承(也许几年后有人认为这是一个很酷的想法),您是否将所有方法都设为虚拟?
或者是否有一些我不知道的想要在 C++ 中禁止这一点的关键原因?
作为参考,这是我在每种语言中所做的实验:
Java
public class Base {
void doSomething(){
System.out.println("Doing the base thing");
}
}
public class Derived extends Base {
void doSomething(){
System.out.println("Doing the derived thing");
}
public static void main(String... argv){
Base object = new Derived();
object.doSomething();
}
}
C++
class Base
{
public:
Base(void);
~Base(void);
virtual void doSomething();
};
void Base::doSomething(){
std::cout << "I'm doing the base thing\n" << std::endl;
}
class Derived :
public Base
{
public:
Derived(void);
~Derived(void);
void doSomething();
};
void Derived::doSomething(){
std::cout << "I'm doing the dervied thing" << std::endl;
}
int main(void){
Base * object = new Derived;
object->doSomething();
return 0;
}
【问题讨论】:
标签: java c++ overriding