Java多态

拟墨画扇 提交于 2020-02-04 17:43:12

多态   

   意义:同一个事物,由于条件不同,执行的结果不同。在Java中实质上指的同一引用类型,使用不同的实例而执行结果不同的。

   注意:【1】同一个类型,一般指父类

      【2】不同:不同的子类实例,同一个方法执行的父类或者子类方法;

   实现多态规则:

      【1】必须有继承关系,子类有一定要重写/实现父类的方法

      【2】本质是  运行时   父类引用之类重写的方法    

   Super  s = new Sub()

    

   多态的实现形式

       【1】父类型引用子类对象(本质)

    //父类作为一引用类型 
    Super s = null;
    //父类引用子类sub1的重新方法
    s= new sub1();
    s.showInfo();   //输出子类sub1的方法
    //父类引用子类sub2的重新方法
    s=new sub2();   
    s.showInfo();   //输出子类sub2的方法  

       【2】父类作为方法形参实现多态

  public void feed(Pet pet) {
           pet.getName()    }

       【3】父类作为方法的返回值实现多态

  public Pet adoptPet(int type) {
          Pet pet = null;
          if(1 == type) {
              pet = new Dog();
          }else if(2 == type) {
              pet = new Penguin();
          }else if(3 == type){
              pet = new Cat();
          }
          return pet;
      }

    类的转换

    说明:在多态中存在两种类型装换。  

        一:自动类型装换  ,  也称向上类型转换。子类可以自动转换成父类。

        二:强制类型转换  ,也称向下类型转换。父类可以强制转换成子类。

        三:必须是继承关系  。

    个人理解  : 上类型转换  格式 :  父类  引用  = new 子类

          其实该引用拥有子类的属性和方法(包括父类私有属性和方法) , 引用的上类型转换 规则只能使用成了父类的属性和方法和子类重写实例。

          强制类型转换 格式 :  子类    新的引用=   (子类)  引用 ;

          满足继承关系可以强制类型转换, 引用可以使用子类的属性和方法必须要强制类型装换。其实创建对象本质是子类,通过转换方法使用子类;

    判断对象的真实类型  

        关键字 : instanceof 

        instanceof 判断类型如下 类  或者 接口的实例

        返回结果 = object instanceof class
        参数:
        返回结果:布尔类型,ture   或者 是 false
        Object:必选项。任意对象表达式。
        Class:必选项。任意已定义的对象类。

        

        类的判断

        Sub   k = new  Sub();
        System.out.println(k   instanceof Sub); //true
        System.out.println(k   instanceof Super); //true
        System.out.println(k   instanceof Object); //true

          接口的实例的判断

     Sub   k = new  Sub();
        _Interface  interf= k;  //定义一个接口
        System.out.println(k   instanceof _Interface  ); //true
        System.out.println(k   instanceof interf); //true

 

 

   

 

      

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!