thinking in java中的一个例子,java和C++表现不是特别一致: #include <iostream> using namespace std; class Base { public: Base() { cout << "Before draw" << endl; Draw(); cout << "After draw" << endl; } virtual void Draw() const { cout << "Base.Draw()" << endl; } }; class Derived : public Base { private: int i; public: void Draw() const { cout << "Derived.Draw(), i: " << i << endl; } }; void f(const Base& b) { b.Draw(); } int main() { Derived d; f(d); return 0; } /* * output Before draw Base.Draw() After draw Derived.Draw(), i: 10944660 */ package thinkingInJava.polymorphism; import static thinkingInJava.util.Print.*; class Base { public Base() { println("Before draw"); Draw(); println("After draw"); } public void Draw(){ println("Base.Draw()"); } } class Derived extends Base { private int i = 10; public void Draw() { println("Derived.Draw(); i: " + i); } } public class Inside210 { public static void main(String[] args) { new Derived(); } } /* * output Before draw Derived.Draw(); i: 0 After draw */