Java面向对象编程——多态

本文深入讲解Java中的多态概念,包括引用变量的两种类型、多态的实现原理、多态存在的必要条件及其好处。同时介绍了向上转型和向下转型的概念及语法格式,并提供了实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

Java 引用变量有两个类型: 一个是编译时类型, 一个是运行时类型。编译时类型由声明该变量时使用的类型决定, 运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致, 就可能出现所谓的多态

多态意味着在一次调用中,根据包含的对象的实际类型(实际的子类对象)来决定应该调用哪个方法。当调用一个方法是,为了实现多态的操作,这个方法即使在父类中声明过,也必须在子类中重写过的方法

概念:

多态指允许不同的类的对象对同一消息做出响应,即对同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)

实现多态的技术称为动态绑定(dynamic binding)

动态绑定是指在执行期间判断所引用的实际类型,根据其实际的类型调用其相应的方法

作用

多态的作用就是消除类型之间的耦合关系

多态存在的三个必要条件

1:要有继承

2:要有重写

3:父类指向子类对象

多态的好处:

可替换性:多态对已存在代码具有可替换性。

可扩展性:多态对代码具有可扩展性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

接口类:多态是超类通过方法签名,向子类提供了一个共同接口,有子类来完善或者覆盖它而实现的

灵活类:他在应用体现了灵活多样的操作,提高了使用效率

简化类:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要

多态的使用:

向上转型

子类向父类的转换称为向上转型

1.向上转型是将一个子类对象直接赋值给一个父类引用变量。它不关心子类新增的功能,只关心子类继承和重写的功能。即丢失了子类扩展的方法。

2.当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。

3.当使用上转型对象在调用这个方法时就可能具有多种形态。因为不同的子类在重写父类的方法时可能产生不同的行为。也就是说,不同对象的上转型对象调用同一方法可能产生不同的行为。

语法格式:

<父类型><引用变量名>=new <子类型>();
Object msg = new String();
向下转型

将一个指向子类对象的父类引用赋给一个子类的引用 ,即将父类类型转换为子类类型,称为向下转型,此时必须强制类型转换

语法格式:

<父类型> <引用变量名> = new (<子类型> ) <父类型的引用变量>;
String str2 = (String) str
<父类型> <引用变量名> =new (<子类型>)<父类型的引用变量>;
String msg = (String) str

instanceof 运算符

在向下转型过程中,如果不是转换为真实子类类型,会出现类型转换异常。需要使用instanceof 运算符来进行 类型的判断

instanceof 左边的变量类型和右边的类要么相同,要么是与右边的类有父子继承关系,否则都会引起报错

语法格式

if( 变量 instanceof 类型) {}

案例代码:

package Demo01;

/**
 * @version 1.0
 * @author: jiazhihao
 * @date: 2021-05-07 10:45
 */
public class Demo01 {
    public static void main(String[] args) {
        // 调用
        Demo03 dog = new Dog();
        dog.shout();

        Demo03 cat = new cat();
        cat.shout();
        animalShout(cat);
        animalShout(dog);

    }

    public static  void animalShout(Demo03 demo03) {
        if (demo03 instanceof cat) {
            cat cat = (cat) demo03;
            cat.shout();

        } else {
            System.out.println("传入参数类型错误");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值