多态

方法的重载和方法的覆写实际上就是多态性的一种体现;真正的多态性还包含一种称为对象多态性的概念。

主要是:子类和父类对象相互转换关系。

向上转型:子类对象自动转换成父类对象        父类  父类对象=子类实例

向下转型:父类对象需要强制转换成子类对象    子类  子类对象=(子类)父类实例

class A{

       public void fun1(){

              System.out.println("1A --> public void fun1(){}") ;

       }

       public void fun2(){

              this.fun1() ;

       }

};

class B extends A{

       public void fun1(){ // 将方法覆写了

              System.out.println("2B --> public void fun1(){}") ;

       }

       public void fun3(){ // 此操作为子类自己定义的,父类中不存在

              System.out.println("3B --> public void fun3(){}") ;

       }

};

public class PolDemo01{

       public static void main(String args[]){

              A a = new B() ;      // 发生向上转型关系,子类实例 --> 父类实例

              a.fun2() ;

       }

};

如果要调用fun3()方法,那么要就行向下转型

class A{

       public void fun1(){

              System.out.println("1A --> public void fun1(){}") ;

       }

       public void fun2(){

              this.fun1() ;

       }

};

class B extends A{

       public void fun1(){ // 将方法覆写了

              System.out.println("2B --> public void fun1(){}") ;

       }

       public void fun3(){ // 此操作为子类自己定义的,父类中不存在

              System.out.println("3B --> public void fun3(){}") ;

       }

};

public class PolDemo02{

       public static void main(String args[]){

              A a = new B() ;      // 发生向上转型关系,子类实例 --> 父类实例

              B b = (B)a ;    // 发生向下转型关系,强制

              b.fun3() ;

              b.fun2() ;

       }

};

有如下代码

A a=new A();

B b=(B)a;

此时ab转型不成功,因为ab之间并没有任何关系。

如果想判断对象时哪个类的实例,则使用instanceof关键字

对象  instanceof    ->此方法返回boolean类型的数据

为了保证对象的向下转型操作正确,在操作前最好判断此对象是否是类的实例。

首先将子类转换成父类,然后判断对象是否是类的实例,最后将父类强制类型转换成子类。

原文地址:https://www.cnblogs.com/jinzhengquan/p/1941536.html