Java核心技术系列之华东师范大学Java核心技术第五章转型、多态和契约设计

Java核心技术系列之华东师范大学Java核心技术第五章转型、多态和契约设计

类转型

在这里插入图片描述
父类一定不可以转成子类么?有一种情况例外:
在这里插入图片描述

多态

多态的定义

多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
在这里插入图片描述
重写:子类的方法替换掉父类的方法,对于类中的方法而言,需要有类
重载:函数名一样,形参不一样。对于函数而言

举个例子:
在这里插入图片描述
这里三个对象调用的内存都是同一块:
在这里插入图片描述

多态的作用

在这里插入图片描述
举个例子,该例子为AnimalTest.java,具体代码如下:

package chapter5.abstractAndInterface;

import java.util.concurrent.Phaser;

public class AnimalTest {
    public static void main(String[] args) {
        Animal[] as = new Animal[4];
        as[0] = new Cat(); // 转型
        as[1] = new Dog();
        as[2] = new Cat();
        as[3] = new Dog();

        for(int i=0; i<as.length; i++) {
            as[i].move(); // 调用每个元素的自身的move方法,可以解释多态作用的第1点
        }

        for(int i=0; i<as.length; i++) {
            haveLunch(as[i]);
        }

        haveLunch(new Cat()); // new Cat()做了向上转型
        haveLunch(new Dog());
        haveLunch(
                new Animal() { //一般接口无法new的,这里new 接口的同时,必须要将接口中的所有方法补足补全,实际上是已经实现了这个接口
                    @Override
                    public void eat() {
                        System.out.println("I can eat from an anonymous class");
                    }

                    @Override
                    public void move() {
                        System.out.println("I can move from an anonymous class");
                    }
                }
        );

    }

    private static void haveLunch(Animal a) {
        a.eat(); // 调用的不是Animal的eat,因为Animal的eat是空的,故而调用的是每个元素自身的eat方法
    }

}

运行结果如下:

cat: i can move
Dog: i can move
cat: i can move
Dog: i can move
cat: i can eat
Dog: i can eat
cat: i can eat
Dog: i can eat
cat: i can eat
Dog: i can eat
I can eat from an anonymous class

其中,Dog类的代码如下:

package chapter5.abstractAndInterface;

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog: i can eat");
    }

    @Override
    public void move() {
        System.out.println("Dog: i can move");
    }
}

该例子中用到的其余相关联的代码见博主另一篇文章Java核心技术系列之华东师范大学Java核心技术第五章继承、接口和抽象类中的抽象类与接口章节。

契约设计

在这里插入图片描述
关于契约设计中的最后一点,我们来看之前的例子:
在这里插入图片描述

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值