java基础-多态

一、概述

  • 多态是继封装、继承之后,面向对象的第三大特性
  • 多态: 是指同一行为,具有多个不同表现形式。
//父类引用指向子类对象
父类类型 变量名 = new 子类名称();
或
接口名称 对象名 = new 实现类名称();

1.1 多态中成员方法调用

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。

  • 访问成员方法:
    看new 的是谁(类 接口),则优先(重名情况)用谁,没有 则向上找

1.2 多态中成员变量调用
只能调用父类中的成员变量

  • 访问成员变量
    1.直接通过对象名称访问:看(声明语句)等号左边是谁(类 接口),优先用谁,没有则向上找
    2.间接通过成员方法访问:看方法属于谁(类,接口),优先(重名情况)用谁,没有则向上找

1.3 多态的好处

在这里插入图片描述
1.4 向上转型

  • 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。
  • 当父类引用指向一个子类对象时,便是向上转型。

使用格式(和多态一样)

父类类型 变量名 = new 子类类型();
Animal a = new Cat();

1.6 向下转型

  • 父类类型向子类类型向下转换的过程,这个过程是强制的。
  • 一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。

使用格式 (类似基本类型强制转换)

子类类型 变量名 = (子类类型) 父类变量名;
Cat c =(Cat) a;

为什么要向下转型?

  • 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做向下转型。

1.7 向下转型异常

为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式如下:

变量名 instanceof 引用数据类型
//如果变量属于该引用数据类型,返回true。
//如果变量不属于该引用数据类型,返回false。
public class Demo08Polymorphism {
    public static void main(String[] args) {

        //多态的写法
        //父类的引用,指向了子类的对象
        Fu obj = new Zi();
        System.out.println(obj.num);
        
        //instanceof 检查obj是否为子类对象的引用
        if(obj instanceof Zi){
            
            Zi objZi = (Zi)obj;
            System.out.println(objZi.num);
        }
        
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值