美文网首页
cs61b2018sp WEEK4.3 子类型多态 VS高阶函数

cs61b2018sp WEEK4.3 子类型多态 VS高阶函数

作者: 且乐一杯酒 | 来源:发表于2022-03-26 09:46 被阅读0次

2022.3.27

WEEK4.3 子类型多态 VS高阶函数

一、内容

1.动态选择小热身~




第一行,o2指向动态类型ShowDog
第二行,o2强制转换后,静态类型变为ShowDog,左边和右边一样,第二行编译通过。且sdx动态类型为ShowDog(就是o2原先指向的实例)
第三行,因sdx动态类型为ShowDog类型,因为有bark方法,所以调用ShowDog的bark方法,没问题
第四行,左边右边静态类型一致,可编译,且dx动态类型为ShowDog
第五行,dx静态变量为Dog,且Dog有bark方法,可编译。dx动态类型为ShowDog,故调用ShowDog的Bark方法
第六行,o2投射为Dog后,有bark方法,编译通过。实际运行时,为动态类型ShowDog,调用ShowDog的方法
第七行,虽然静态类型不同,但有继承关系,可编译
最后一行,因为o3静态类型为Object,没bark方法,编译报错

2.子类型多态(Subtype Polymorphism)

max方法

观察如上代码,可见有一处错误,就是传入的要比较的元素不一定能用>来比较

解决方法一:



传入参数特别化,但明显这种不够泛用

解决方法二:


自己写的OurComparable接口

就是自己写一个接口,使其可以比较,具体实现代码就不贴了
但还是有一个缺点,就是如果和Dog无关的类(如没有继承关系)例如Cat、Horse,无法使用此接口

3.Comparable接口


类里实现了这个接口,记得泛型传参
重写接口方法
优化后的Maximizers

4.Comparator接口


注:需要导包java.util.Comparator
一般写在需要比较的类中,作为嵌套类,而且我们可见,里面的变量和外部类无关,故可用static。而且这里为了符合OOC规范,用了一个getXXX方法去隐藏这个Comparator
使用范例

相关文章

  • 四、函数进阶

    一. 高阶函数 参数类型包含函数类型或返回值类型为函数类型的函数为高阶函数。 常见的高阶函数 高阶函数的调用 二....

  • Kotlin学习之初探——高阶函数和内敛函数

    高阶函数 概念:参数类型包含函数,或者是返回类型是函数类型的函数为高阶函数举例:fun method1(block...

  • 12. 高阶函数

    1. 高阶函数的定义 高阶函数: 接收另一个函数(函数类型)作为参数,或返回值的类型是另一个函数。 2. 参数类型...

  • 高阶函数 & 匿名函数 & Lambda 表达式

    高阶函数 定义 函数的 「参数」或者 「返回值」 是 「函数类型」 的函数,成为高阶函数 作用 在函数内部可以动态...

  • 四,Kotlin高阶函数详解

    1,基本定义 什么是高阶函数?高阶函数定义:参数有函数类型或者返回值是函数类型的函数。在Kotlin中增加了一个函...

  • 每天学一点 Kotlin -- 高阶函数

    1. 高阶函数 1.1 接受一个参数是函数类型的函数,或者返回一个函数类型的值,就可以称为高阶函数。 1.2 在文...

  • 高阶函数

    高阶函数,至少满足下面之一: 函数可以作为参数被传递 函数可以作为返回值输出 高阶函数的应用 类型检验 高阶函数实...

  • 函数

    函数类型作为函数参数 函数类型作为函数返回值 返回值是函数类型的函数,叫做高阶函数(Higher-Order Fu...

  • JavaScript 高阶函数浅析

    高阶函数 在 JavaScript 中,函数是一种特殊类型的对象,它们是 Function objects。高阶函...

  • Kotlin学习之高阶函数和Lambda表达式:函数类型和匿名函

    Kotlin学习之高阶函数和Lambda表达式:函数类型和匿名函数 高阶函数是参数或返回值包含函数的函数,Lamd...

网友评论

      本文标题:cs61b2018sp WEEK4.3 子类型多态 VS高阶函数

      本文链接:https://www.haomeiwen.com/subject/ppccjrtx.html