CS61B学习笔记(九)-Rd4.3-子类多态性与HoFs的关系
幻灯片:cs61b 2021 lec10 inheritance3 - Google 幻灯片
Reading:4.3 Subtype Polymorphism vs. HOFs · Hug61B (gitbooks.io)
子类多态性多态性的核心是“多种形式”。在 Java 中,多态性是指对象可以具有多种形式或类型。在面向对象编程中,多态性涉及如何将一个对象视为其自身类的实例、其超类的实例、其超类的超类的实例等。
考虑一个静态类型为deque的变量deque。调用dequeue .addFirst() 将在执行时确定,这取决于调用 addFirst 时deque的运行时类型或动态类型。正如我们在上一章中看到的,Java使用动态方法选择来选择调用哪个方法。
运行时类型(Runtime Type): 运行时类型指的是在程序执行过程中,某个变量或对象的实际类型。这是由程序在运行时动态决定的。在一些面向对象的语言中,对象可能被声明为某个类型,但在运行时可能会被赋予该类型的子类型。因此,运行时类型是程序实际处理的对象类型,而不仅仅是在代码中声明的类型。如基类。
动态类型(Dynamic Ty ...
CS61B学习笔记(八)-Rd4.2-Extends.Casting,HigherOrderFunction
幻灯片:cs61b 2021 lec9 inheritance2 - Google 幻灯片
Reading:4.2 Extends, Casting, Higher Order Functions · Hug61B (gitbooks.io)
Extends关键字现在,您已经了解了如何使用 implements 关键字来定义与接口的层次结构关系。如果我们想定义类之间的层次结构关系怎么办?
implements 关键字:定义类与接口的层次结构关系
extends关键字:定义类之间的层次结构关系
通过使用 extends 关键字,子类继承父类的所有成员。 “成员”包括:
所有实例变量和静态变量
所有方法
所有嵌套类
请注意,构造函数不是继承的,子类不能直接访问私有成员。
12345678910111213141516171819202122/** 请注意,当有人调用 removeLast SLList 时,它会丢弃该值 - 再也看不到了。但是,如果那些被移除的价值观离开并开始对我们进行大规模的反抗呢?在这种情况下,我们需要记住那些被删除的(或者更确切地说是有缺陷的>:()值是 ...
CS61B学习笔记(七)-Rd4.1-导言和接口
4.1 Intro and interfaces · Hug61B (gitbooks.io)
方法重载(method overloading)12public static String longest(SLList<String> list)public static String longest(AList<String> list)
这就是所谓的方法重载。当您调用 WordUtils.longest 时,Java 会根据您提供的参数类型知道要运行哪一个。如果为其提供 AList,它将调用 AList 方法。与 SLList 相同。
Java 足够聪明,知道如何为不同类型的两种相同的方法处理,这很好,但重载有几个缺点:
这是超级重复和丑陋的,因为你现在有两个几乎相同的代码块。
它需要更多的代码来维护,这意味着如果你想对方法进行一些小的更改,例如更正一个错误,你需要在 longest 方法中为每种类型的列表进行更改。
如果我们想创建更多的列表类型,我们必须为每个新的列表类复制该方法。
上位词、下位词和接口继承Hypernyms, Hyponyms, a ...
CS61B项目练习笔记(三)-Proj1
The Deque APIDeque(通常发音为“deck”)是双端队列的不规则首字母缩写。双端队列是具有动态大小的序列容器,可以在两端(其前端或后端)扩展或收缩。
具体而言,任何 deque 实现都必须具有以下操作:
public void addFirst(T item) :将某个类型的 T 项目添加到 deque 的前面。你可以假设这 item 从来都不是 null .
public void addLast(T item) :将类型的 T 项目添加到 deque 的背面。你可以假设这 item 从来都不是 null .
public boolean isEmpty() :如果 deque 为空,则返回, false 否则返回 true 。
public int size() :返回 deque 中的项数。
public void printDeque() :从头到尾打印 deque 中的项目,用空格分隔。打印完所有项目后,打印出新行。
public T removeFirst() :删除并返回 deque 前面的项目。如果不存在此类项,则返回 null 。
public T ...
中国矿业大学寒招介绍
学校基本介绍
美照
广东省分数线介绍
粗略版
招生专业类
23-计划数
23-平均分
23-平均位次
22-计划数
22-平均分
22-平均位次
21-计划数
21-平均分
21-平均位次
人工智能
6
608
21079
大数据管理与应用
2
607
21726
机器人工程
3
607
21726
2
599
22073
遥感科学与技术
4
606
22388
4
595
26470
计算机类
15
613
18163
15
604
18725
15
605
19989
电子信息类
12
609
20482
12
600
21339
12
598
24417
机械类
12
605
23074
10
598
22774
12
595
26470
安全科学与工程类
4
605
23074
5
596
25799
土木类
7
596
25799
4
596
25799
7
596
25799
建筑类
3
603
24424
2
599
23750
2
599
23750
...
CS61B项目练习笔记(二)--Lab3
经验点:
Stopwatch的使用
在类的两个实现之间执行比较测试。
随机调用类内部的方法。
在类的两个实现之间执行随机比较测试。
使用 IntelliJ 中的恢复按钮。
向断点添加条件。
创建异常断点。
Stopwatch库的使用123456789101112131415161718192021222324252627package timingtest;import edu.princeton.cs.algs4.Stopwatch;/** * Created by hug. */public class StopwatchDemo { /** Computes the nth Fibonacci number using a slow naive recursive strategy.*/ private static int fib(int n) { if (n < 0) { return 0; } if (n == 1) { ...
CS61B学习笔记(六)-数组基础的列表(2.4,2.5)
2.4 Arrays · Hug61B (gitbooks.io)
2.5 The AList · Hug61B (gitbooks.io)
数组数组基础数组是一种特殊类型的对象,它由一系列编号的内存盒组成。这与类实例不同,类实例具有命名的内存盒。为了得到数组的第i个元素,我们使用了在HW 0和Project 0中看到的括号表示法,例如 A[i] 得到A的第 i 个元素。
数组包括:
一个固定的整数长度N
一个由N个存储器盒组成的序列(N =长度),其中所有盒都是相同类型的,编号为0到N - 1。
和类不同,数组没有方法
数组创建
x = new int[3];
y = new int[]{1, 2, 3, 4, 5};
int[] z = {9, 10, 11, 12, 13};
所有这三种表达法都创建了一个数组。
第一种表示法,用于创建 x ,将创建一个指定长度的数组,并使用默认值填充每个内存框。在本例中,它将创建一个长度为3的数组,并使用默认值 int 0 填充3个框中的每一个。
第二种表示法,用于创建 y ,创建一个数 ...
CS61B学习笔记(五)--链表基础的列表(2.2,2.3)
2.2 SLList ·拥抱61B — 2.2 The SLList · Hug61B (gitbooks.io)
2.3 DLList ·拥抱61B — 2.3 The DLList · Hug61B (gitbooks.io)
SLLists在第 2.1 章中,我们构建了类 IntList ,这是一个列表数据结构,从技术上讲,它可以完成列表可以执行的所有操作。然而,在实践中,它 IntList 使用起来相当笨拙,导致代码难以阅读和维护。
从根本上说,问题在于 IntList 这就是我所说的裸递归数据结构。为了正确使用递归,程序员必须理解和利用递归,即使是简单的列表相关任务。这限制了它对新手程序员的有用性,并可能引入一类全新的棘手错误,程序员可能会遇到这些错误,具体取决于该 IntList 类提供的帮助程序方法类型。
初级版本:12345678910111213141516171819202122232425262728293031323334353637public class SLList { public class IntNode { ...