Java篇 之多态的高度总结!!!

一、多态的概念

多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状 态。

通俗来说,一件事情发生在不同对象身上,就会产生不同的结果。这就好比同样是打印机,彩色打印机和黑白打印机打印出来的效果却不同。

二、多态实现的重要条件

1.必须在继承体系下,发生向上转型

向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。

其三个用法如下:

1. 直接赋值
2. 方法传参
3. 方法返回

2.子类必须要对父类中方法进行重写

3.通过父类的引用调用重写的方法

我们用代码的形式来分析:
class Animal {
    String name;
    int age;
    public Animal(String name,int age) {
        this.name = name;
        this.age = age;
    }
    public void eat() {
        System.out.println(name + "吃食物");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println(name + "吃骨头");
    }
    public Dog(String name,int age) {
        super(name,age);
    }

}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Dog("小虎",11);//1.直接赋值
        animal.eat();
        Dog dog = new Dog("小黑",12);
        eatFood1(dog);
        Animal a = eatFood2(dog);
    }
    //2.作为函数参数
    public static void eatFood1(Animal animal) {
        animal.eat();
    }
    //3.作为函数返回值
    public static Animal eatFood2(Dog dog) {
        return dog;
    }
}

向上转型:

 子类中对父类方法重写:

通过父类引用调用重写方法: 

 

 三、动态绑定与静态绑定

1.重写与重载

重写 也称为覆盖。重写是子类对父类非静态、非 private 修饰,非 fifinal 修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变 即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。重载中:
1.子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致
2.被重写的方法返回值类型可以不同,但是必须是具有父子关系的
3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被 public 修饰,则子类中重写该方法就不能声明为 protected
4.父类被 static private 修饰的方法、构造方法都不能被重写。
5.重写的方法 , 可以使用 @Override 注解来显式指定 . 有了这个注解能帮我们进行一些合法性校验 . 例如不小心 将方法名字拼写错了 ( 比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法 , 就会编译报错 , 提示无法构成重写

重载:Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。重载中:

1.方法名必须相同

2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

3. 与返回值类型是否相同无关
3.

2.动态绑定与静态绑定的概念

静态绑定 :也称为前期绑定 ( 早绑定 ) 即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。
动态绑定 :也称为后期绑定 ( 晚绑定 ) ,即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。

3.动态绑定是实现多态的基础

其实,在完成实现多态的三个条件时,就实现了动态绑定,动态绑定是实现多态的基础。在底层的代码中,在编译时在调用重写方法,调用的是父类的代码,而在代码编译后的运行阶段则调用的是子类的重写方法!!!所以动态绑定也称之为运行时绑定。

而如方法重载这样的代码,在调用时根据输入的形参就可以确认调用的是哪个重载方法,在编译阶段就已经可以确认调用!!!所以,方法重载是一种静态绑定的体现,而静态绑定也可以称之为编译时绑定。

四、总结 

在学习多态的过程中,牢记实现多态的三个要点,即1.继承关系上的向上转型
2.子类和父类有同名的重写方法
3.通过父类对象的引用调用该重写方法
其次将动态绑定与静态绑定之间的关系捋清楚,完成多态的三个条件就是完成了动态绑定,同时捋清楚重写与重载的关系。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值