Week 4.2 | Lecture 10 | 多态性设计通用方法、比较器 | CS61B-Spring-2018

一、多态性

多态性:多态性的核心是“多种形式”。在Java中,多态性是指对象如何具有多种形式或类型。在面向对象的编程中,多态与如何将一个对象视为其自己的类的实例,其超类的实例,其超类的超类的实例等相关。
(我的理解是:与动态方法选择有关,为一个父类型对象赋值为各种子类型对象,该对象在调用方法的时候,会根据动态类型来选择override或非override的不同方法,这样就可以通过一个对象的多态性特征完成不同的行为。)

继承使使用多态性设计通用数据结构和方法成为可能。

如何使用继承和多态性实现设计通用的数据结构和方法呢?

二、以“比较”为例

以“比较”方法为例,说明如何使用继承和多态性实现设计通用的数据结构和方法。
假设我们要编写一个max函数,该函数可以接收任何数组(无论类型如何)并返回数组中的最大项。

1. 最垃圾的方法

目的是让体型最大的狗叫。所以就写一个maxDog方法,接收Dog[],比较出其中size最大的dog,并将其返回。

public static Dog maxDog(Dog[] dogs) {
   
    if (dogs == null || dogs.length == 0) {
   
        return null;
    }
    Dog maxDog = dogs[0];
    for (Dog d : dogs) {
   
        if (d.size > maxDog.size) {
   
            maxDog = d;
        }
    }
    return maxDog;
}

public static void main(String[] args) {
   
    Dog[] dogs = {
   new Dog("Elyse", 3), new Dog("Sture", 9), new Dog("Benjamin", 15)};
    Dog maxDog = (Dog) maxDog(dogs);
    maxDog.bark();
}

缺陷:

  • 如果要比较任何其他东西,都要写一个新方法,如maxDuck(Duck[] Ducks), maxCat(Cat[] Cat)。除此之外还需要修改main函数中的函数调用。造成大量冗余代码。
  • 如果希望按照其他方式排序dog,如按照dog名字的字母顺序,都要重新写方法,并修改main函数中的调用。

2. OurComparable

关键是要有一个通用的比较两个对象的方法。

我们可以创建一个接口,以确保任何实现类(如Dog)都包含一个比较方法,我们将其称为compareTo。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值