第三周总结笔记

CS61B的第三周主要是关于Java的单元测试,双向链表这两个部分

一,Java的单元测试与Junit

Junt的一些基本用法。没啥好说的。详细的内容之后才有。

二,Java的接口,实现接口以及动态静态类型

(1)接口实现interface implement和默认方法default关键字

简单来说就是接口原先不能有方法体,但是从Java8开始接口可以先实现一个默认的方法体。采用default关键字。

(2)Static Type和Dynamic Type以及Dynamic Method Selection

如下所示的一个例子。可以看到最后

a.flatter(d);

输出的是”u r cool animal”。这就涉及到所谓的Static TypeDynamic Type以及Dynamic Method Selection

Static TypeDynamic Type定义如下

声明的类型是Static Type,而实例化的时候的类型是Dynamic Type

然后我们明确一下overriding重写和overload重载

overriding重写指的是子类或者接口的实现类对于签名一致(既参数与函数名一致)的父类函数或者接口函数的实现。

overload指的是函数名一致但是参数不同的另一种函数实现方式。


最后我们再来看下Method Selection Algorithm

以此为例:
解析a.flatter(d)
a的static type是Animal,dynamic type是Dog
d的static type是Dog,dynamic type是Dog

a.flatter(d); 在编译期,记录下a的static type的方法中可以处理d的static type类型参数的方法,此处就是Animal的flatter方法。(d继承自Animal,尽管d的static type和dynamic type都是Dog,但还是可以作为Animal类型的参数被接受)

因为Dog的flatter方法是重载了其父类Animal的flatter方法
而不是重写overriding,所以运行时没有改变Animal的flatter
方法改为Dog版本的(因为不是重写!!!)
所以最后还是采用了Animal版本的flatter方法

三,双端队列

参见链表目录下的Deque文章

四,参考资料

【1】Josh Hug’s Book

【2】Alist Slides

【3】Testing Slides

【4】inheritance

【5】Project1A



CS61B      总结 CS61B

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!