标签:
1、应用程序不必为每个子类编写单独的功能调用,只需要对抽象基类(父类)进行处理即可。以不变应万变
2、子类的功能可以被父类的引用变量调用,这个叫做向后兼容。
例如:
class A {
void Func1(){
System.out.println("A func1 is calling");
}
void Func2(){
Func1();
}
}
class B extends A{
void Func1(){
System.out.println("B func1 is calling");
}
void Func3(){
System.out.println("B func1 is calling");
}
}
class Test{
public static void main(String [] args){
B b = new B();
CallA(b)
}
public static void CallA(A a){
a.Func1();
a.Func2();
}
}
在这段代码里面可以看到B继承了A并且覆盖了A中的Func1
在main中new了一个B的对象,调用了CaiiA(),同时传递了一个类B的一个对象b给了CallA(b),并且b被上溯造型为A在CallAde(b)的内部将会调用a.Func1是调用的A的Func1还是B的func1呢?
答案是调用的是b的Func1,因为传递到CallA里面的是一个B类的对象 //根据传进来的对象自动调用对应的方法
同时,运行a.Func2(),因为B中没有这个方法,所以将会运行A中的这个方法。
但是A中的这个方法要调用Func1,这个时候还是不会调用A中已经有的Func1,而是继续调用B中的这个Func1的因为子类的功能可以被父类的引用变量调用,这个叫做向后兼容
多态必备的三个条件1、有继承2、有重写3、父类引用指向子类对象
标签:
原文地址:http://www.cnblogs.com/chenwei123/p/5540413.html