java中关于“多态”的那些事!

java中关于“多态”的那些事!

谨记:面向抽象编程,不要面向过程编程
什么是多态?

多态是同一个行为具有多个不同表现形式或形态的能力。例如下面这张图:有人叫汽车,有人叫宝马,但是都是车,只是叫法不一致。再简单一点就是:就是用基类的引用指向子类的对象

在这里插入图片描述

多态的前提

继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

父类引用指向子类对象 ()

Animal 是 Dog和Cat的父类在这里插入图片描述

多态缺点及解决方法
不能调用子类特有的方法

解决“不能调用子类特有的方法的”方法: 强制类型转换 (向上转型和向下转型)
强行转换问题ClassCastException 类转型异常:例如:把一只猫变成一只狗的
在这里插入图片描述
在这里插入图片描述
“instanceof" 解决强制转换的问题:
  instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:

boolean result = obj instanceof Class

其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。

注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

多态优点

消除类型之间的耦合关系,提高代码的可维护性
举个例子(扩展性强),我需要换车去兜风;我就不用写多个方法,只需要改多态的引用对象即可,如果买了新车直接加一个类就可以啦!

/*
    汽车
 */
public class Car {

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

public class BMW extends Car {
    @Override
    public void run() {
        System.out.println("开着宝马去兜风");
    }
}

public class Benz extends Car {
    @Override
    public void run() {
        System.out.println("开奔驰去修车");
    }
}

/*
    人
 */
public class Person {
    /*
        这里Car参数也是多态的一种体现
     */
    public void drive(Car c) {
        //开车
        c.run();
    }
}
/*
    多态的好处
 */
public class Test03 {
    public static void main(String[] args) {
        //创建汽车对象
        Car car = new Benz();//多态
        /*
        我们在需要换车子的时候只需要修改 new Benz() ;即可,就不要大篇幅改代码
        其实也就是我在开头强调的面向抽象编程!
		*/
        //创建人的对象
        Person paul = new Person();
        paul.drive(car);

    }
}

解析图:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值