Interface & Inheritance
重载
Java允许多个方法拥有相同名称,只要他们的参数不同,这就是Java中的重载
重载的优缺点:
- 代码基本一样
- 对其余猎豹不适用,需要增加重载
- 难维护
Hypernym and Hyponym
上位词与下位词
如Dog与poodle、malamute等狗的品种,前者为后者的上位词,后者为前者的下位词
Java中也有类似的概念,如我们可以把List作为SLList与ArrayList的上位词
在Java中表示这种属性:
- 给上位词定义一个引用属性
- 指定某些词为该上位词的下位词
- 使用关键词
interface来定义上位词 - 使用关键词
implements来定位下位词
接口内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package lec8;
public interface List61B<T> {
public void addFirst(T x);
public void addLast(T x);
public T getFirst();
public T getLast();
public T get(int i);
public T removeLast();
public int size();
}下位词部分修改:
1
2
3
4
public class ArrayList<T> implements List61B<T>
...
public class SLList<T> implements List61B<T>
...这样在使用时我们只需要以该接口作为类型定义即可
重写
若你有一个子类实现接口,其方法与超类的签名相同,则可以在子类中重写来覆盖该方法
有相同名称而不同签名的方法叫做重写
在要重写的方法上面添加@override标签,当该方法不是一个重写方法时,该代码不会被编译
使用该标签的优点:
- 主要优点:防止拼写错误,当标记了@override,但方法并没有被重写,就会爆CE
- 提醒程序员方法来自于更高级的继承
Interface Inheritance
使用implements关键字来指定子类所具备的能力叫作接口继承
- 接口:所有方法签名的列表
- 继承:子类继承了来自超类的接口
- 接口继承指定了子类可以做什么,而没有指定怎么做
- 子类必须重写所有方法,否则会CE
Implementation Inheritance
接口继承只继承了签名,而没有继承实现
Java允许另一种继承:实现继承,使得子类可以继承签名与实现
使用default关键字来指定一个子类可以从接口继承的方法
1
2
3
4
5
6
7
// implementation inheritance
default public void print(){
for (int i = 0;i<size();i++){
System.out.print(get(i)+" ");
}
System.out.println();
}(在接口文件中写默认的print方法,子类可以继承该方法)
1
2
3
4
5
6
7
8
9
// 重写接口中的print方法
@Override
public void print(){
IntNode p = sentinel.next;
while(p!=null){
System.out.print(p.item+" ");
p = p.next;
}
}(针对特定子类,可以对default方法进行重写)
Abstract Data Type
抽象数据类型(ADT)仅由其操作定义,而不由其实现定义