多态详解 ——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;
}

动态绑定机制

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

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

    当有多态发生时,一定会发生动态绑定 动态绑定机制就是程序运行期间,会判断对象的真正的创建者是谁,就调用谁里面的方法
经验分享 程序员 微信小程序 职场和发展