ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java多态的初理解

2021-12-20 20:03:17  阅读:97  来源: 互联网

标签:Java 对象 子类 多态 转型 理解 父类 eat


多态

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

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

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

向上转型

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

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

案例:

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,对象,子类,多态,转型,理解,父类,eat
来源: https://blog.csdn.net/m0_53131141/article/details/121998857

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有