Java多态的实际理解

1多态

概述

1)概念

官方: 同一对象,在不同时刻表现出来的不同形态
通俗: 创建一个子类的对象,使用父类类型的变量来接收   栗子: Animal a = new Cat();

2)前提条件

要有继承/实现关系
要有方法重写
要有父类引用指向子类对象
成员的访问特点
1)成员变量

编译看左边、运行看左边


2)成员方法

编译看左边、运行看右边
多态的好处

1)为什么要定义一个动物操作类

将一系列的操作进行封装,提高代码的复用性、维护性

2)好处

提高代码的扩展性
应用场景: 定义一个方法时,如果将这个方法的形参定义成父类的类型, 就可以提高这个方法扩展性, 因为调用该方法时传递任意子类的对象进来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUXTkMy5-1667637253883)(images/image-20220314201743.png)]

3)String类 boolean equals(Object anObject)

public static void main(String[] args) {
    String s = "张三";
    boolean b = s.equals("李四");
}
多态的弊端

1)概述

不能使用子类特有的方法

2)代码

public class Animal {

    public void eat() {
        System.out.println("动物吃东西");
    }

}
//动物操作类
public class AnimalOperator {
    public void useAnimal(Animal a) {
        a.eat();
        //a.lookDoor();
    }  
}
转型

1)向上转型

Animal a = new Cat();

2)向下转型

①语法

public void useAnimal(Animal a) {
    Dog dog = (Dog) a; //强转 - (卸掉伪装)
    dog.lookDoor();
}

②风险

如果变量a指向的对象不是Dog类型,进行向下转型时就会抛出ClassCastException异常
参数a的数据类型是 Animal动物类型
参数a保存的对象是 Cat的对象

强转:  Animal动物类型的a 强行转换成 Dog类型
风险:  如果a保存的对象不是Gog的对象,那么代码就会报错 
注意:  强转指的是转换的参数a的数据类型
③解决方案

进行向下转型之前,使用instanceof关键字进行判断
重点总结

1)语法
  Fu f = new Zi();
  
2)前提条件
  要有继承/实现关系
  要有方法重写
  要用父类引用指向子类对象

3)成员的访问特点
  成员变量: 编译看左边(父类)、运行看左边(父类)    
  成员方法: 编译看左边(父类)、运行看右边(子类)
      
4)转型
  向上转型:  Fu f = new Zi();    
  向下转型:  Dog dog = (Dog) a; //强转 - (卸掉伪装) 
  解决方案:  向下转型有风险,转型之前需要用instanceof关键字判断

6)应用场景
  定义方法时将方法的形参定义成父类类型 - 可以传递该类的所有子类对象进来
    
7)什么时候用多态
  ①学完多态后并不是创建对象就必须使用多态了!!!
  ②切记!!! 我们创建对象时还是按照以前的方式来,不要使用多态!!!
  ③什么时候使用多态呢? - 见应用场景

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值