第三周总结笔记
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 Type和Dynamic Type以及Dynamic Method Selection。
Static Type和Dynamic 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文章
四,参考资料
【2】Alist Slides
【4】inheritance
【5】Project1A
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!