【CS61B】Lec8-Interface & Inheritance

  • ~1.70K 字
  1. 1. Interface & Inheritance
    1. 1.1. 重载
    2. 1.2. Hypernym and Hyponym
    3. 1.3. 重写
    4. 1.4. Interface Inheritance
    5. 1.5. Implementation Inheritance
    6. 1.6. Abstract Data Type

Interface & Inheritance

重载

Java允许多个方法拥有相同名称,只要他们的参数不同,这就是Java中的重载

重载的优缺点:

  • 代码基本一样
  • 对其余猎豹不适用,需要增加重载
  • 难维护

Hypernym and Hyponym

上位词与下位词

如Dog与poodle、malamute等狗的品种,前者为后者的上位词,后者为前者的下位词

Java中也有类似的概念,如我们可以把List作为SLList与ArrayList的上位词

在Java中表示这种属性:

  1. 给上位词定义一个引用属性
  2. 指定某些词为该上位词的下位词
  • 使用关键词interface来定义上位词
  • 使用关键词implements来定位下位词

接口内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)仅由其操作定义,而不由其实现定义

赞助喵
非常感谢您的喜欢!
赞助喵