java多态

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、父类引用指向子类对象

posted @ 2016-05-29 21:10  薄灬荷  阅读(333)  评论(0编辑  收藏  举报