Java多态的初理解

多态

面向对象程序设计的三大支柱是封装、继承和多态。
多态性概念:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

        多态体现为父类引用变量可以指向子类对象

        子类继承父类,编写一个可以指向子类的父类类型引用,该引用既可以处理父类对象,也可以处理子类对象当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为

向上转型

子类引用的对象转换为父类类型称为向上转型。也就是将子类对象转为父类对象。

向上转型后父类不能调用子类自己的方法

案例:

class Animal {
    public void eat(){
        System.out.println("animal eatting...");
    }
}

class Cat extends Animal{

    public void eat(){

        System.out.println("鱼");
    }
}

class Dog extends Animal{

    public void eat(){

        System.out.println("骨头");
    }

    public void run(){
        System.out.println("跑");
    }
}

public class book {

    public static void main(String[] args) {

        Animal animal = new Cat(); //向上转型
        animal.eat();

        animal = new Dog();
        animal.eat();
    }

}

//鱼
//骨头

代码中Animal animal = new Cat(),即是将子类对象Cat转化为父类对象Anima。而animal调用的方法是子类的方法。

向上转型的使用格式:父类类型  变量名 = new  子类类型();

向下转型

一个向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用类型。

 public static void eat(Animal a){
        if(a instanceof Dog){  
            Dog d = (Dog)a;
            d.eat();//向下转型
            d.run();    
        } 
        if(a instanceof Cat){  
            Cat c = (Cat)a;//向下转型
            c.eat();
            System.out.println("我也想跑,但是不会");   
        } 
    }

代码中的instanof关键字用于判断某个对象是否属于某种数据类型。返回值为布尔类型。

向下转型使用格式:子类类型  变量名 = (子类类型) 父类类型变量;

多态的实现条件  :继承,重写,向上转型

继承:在多态中必须存在有继承关系的子类和父类

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象。只有这样该引用才能够具备技能调用父类的方法和子类的方法。

实现多态的技术称为:动态绑定——父类引用指向的或这调用的方法时子类的方法。

多态的优点

1、可替换性。多态对已存在代码具有可替换性。
2、可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。
3、接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4、灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
5、简化性。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
 

上一篇:Java中抽象类和接口的区别


下一篇:【Leetcode-数组】分糖果