转载:http://www.cnblogs.com/lxw0109/p/CPP_JAVA.html
package org.lxw.demo; class A { public void f1() { System.out.println("A:f1"); } public void f2() { System.out.println("A:f2"); } }; class B extends A { public void f1() { System.out.println("B:f1"); } public void f3() { System.out.println("B:f3"); } }; public class Hello { public static void main(String[] args) { B b = new B(); A a = b; b.f1(); //B:f1 a.f1(); //B:f1 } }
上面所示的是JAVA中的向上转型,如果所调用的方法被子类覆写过,则调用的是子类中被覆写之后的方法。
#include <iostream> using namespace std; class A { public: void f1() { cout << "A:f1" << endl; } void f2() { cout << "A:f2" << endl; } }; class B : public A { public: void f1() { cout << "B:f1" << endl; } void f3() { cout << "B:f3" << endl; } }; int main() { B b; A a = b; b.f1(); //B:f1 a.f1(); //A:f1 return 0; }
此处所示的是C++中的向上转型,此处即使所调用的方法被子类覆写,但并没有形成多态,则调用的仍是父类中的方法。
形成多态的条件: ①C++父类中必须要有虚函数(即virtual关键字)②必须存在父类的指针或引用。
两个条件同时具备时,才会发生多态,缺一不可。