多态详解 ——Java学习笔记

多态详解 ——Java学习笔记

前面的面向对象学习简单的写了一下多态,经过新的学习现在又详细的了解了多态,包括前面没学过的方法重写、向上转型、向下转型、动态绑定机制,在这里记录一下知识点

多态

一个方法在不同类中的不同实现

实现多态的前提条件:
  • 继承
  • 方法重写
  • 父类引用指向子类对象(向上转型)
方法重写:
  • 当父类中的方法无法满足子类的需求时,子类可以对该方法进行重写
  • 必须和父类的方法名、返回值、参数列表完全相同,并且访问修饰符的范围不能变小
多态:
  • 把父类对象指向子类对象的引用,就是把子类对象当作父类对象来使用,
  • 他可以调用父类中所有的成员属性和方法(但是已经不能在调用子类自己的属性和方法)
  • 但是如果子类中有重写了父类的方法,那么执行这个方法时一定执行子类的重写方法

多态的例子:

//测试类
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.talk();
        //以父类的名义实例化
        Animal dog = new Dog();
        //以子类自己的方法实现
        dog.talk();
        Animal cat = new Cat();
        cat.talk();
    }
}


//父类
class Animal {
    public void talk(){
        System.out.println("叫声");
    }
}

//子类
class Cat extends Animal{
    public void talk(){
        System.out.println("喵喵");
    }
}

//子类
class Dog extends Animal{
    public void talk(){
        System.out.println("汪汪");
    }
}

引用数据类型转换

前面学习了基本数据类型的转换,自动转换和强制转换,引用数据类型转换也一样。分为向上转型和向下转型。

  • 转型也是基于继承的基础上的。
向上转型
  • 多态本身就是子类类型向父类类型向上转型的过程

  • 将子类对象转换为父类对象就是向上转型(这个过程是自动的,可以认为自动转型)

    • 父类类型 对象名 = new 子类类型();
      
  • 可以把向上转型后的对象看成父类对象

  • 向上转型的对象可以调用父类中的所有普通方法和成员属性,但是只能调用子类中重写的方法

向下转型
  • 将父类对象转换为子类对象就是向下转型(这个过程是强制的,需要强制转换)

  • 注意:

    • 不能直接把一个父类对象强制转换为一个子类对象
    • 必须是一个向上转型后的对象,(就是向上转型后的还原)
  • 格式:

    • 子类类型 对象名 = (子类类型) 向上转型后的父类对象;
      
为什么要转型

当使用多态的方式调用方法时,首先检查父类中是否有该方法,如果没有,编译错误,(不能调用子类独有的方法),所以使用多态(向上转型后)又要调用子类特有的方法时,就要做向下转型

instanceof关键字

判断某个对象是否属于类或接口

在进行向下转型时,会遇到一些异常情况,俩个对象的类型不匹配等等问题,编译没问题但是运行时会有异常,所以使用向下转型时,最好使用上instanceof关键字,避免类型转换异常

//先判断,后转型
if (animal1 instanceof Dog){
    Dog dog1 = (Dog) animal1;
}
动态绑定机制

也叫做后期绑定、延迟绑定

绑定就是一个方法的调用要与方法所在的类关联起来。动态绑定就是在运行时根据具体对象的类型进行绑定

  • 当有多态发生时,一定会发生动态绑定
  • 动态绑定机制就是程序运行期间,会判断对象的真正的创建者是谁,就调用谁里面的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值