Lec6-继承与接口的使用


继承及其应用

extends

  • 子类可以访问父类的公共(public)和受保护 (protected)成员
  • 私有(private)成员无法被直接被访问,但可以通过调用父类的方法来访问

可以使用obj instanceof MyCLass 表达式来判断对象 obj是否为MyClass的实例化对象

super

  • 使用 super.attribute 可以 引用父类中定义的非私有属性

  • 如果子类重写了父类的某个方法,那么子类通过super.methodName() 可以 调用父类所实现的那个方法

    (this.methodName()是子类自己重写的方法)

  • 一般使用 super(arguments) 来调用父类的构造方法,从而完成对父类所定义属性的初始化

@Override

1
2
3
4
@Override 
public String getClassName() {
return “XBottle";
}

可在子类重写父类方法时标注,非强制要求,可选

子类方法的方法名参数列表必须与父类方法完全相同


接口及其应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
interface Myinterface {
void myMethod1();
void myMethod2();
void myMethod3();
}

class Myclass implements Myinterface {
@Override
public void myMethod1() {
System.out.println("Implementation of myMethod1");
}
@Override
public void myMethod2() {
System.out.println("Implementation of myMethod2");
}
@Override
public void myMethod3() {
System.out.println("Implementation of myMethod3");
}
}
  • 要求接口中的所有方法都被实现(覆写)
  • 可以用a instanceof B判断对象a是否实现了接口B,即是否类型B的实例
  • 若父类实现了某个接口,则子类也可以使用父类的接口方法

接口和继承的区别

数量 关系 概念本质
继承 一个类只能有一个父类 子类继承了父类的所有属性和方法 建立了数据抽象层次
接口 一个类可以实现多个接口 实现接口中所定义的全部方法 建立了行为抽象层次

作业内容与建议

  • 仍为冒险者游戏,在第四次作业的基础上迭代开发
  • 允许冒险者雇佣另一个冒险者,且赋予装备、药水瓶、食物、冒 险者价值的概念
  • 细化装备和药水瓶的类型,具有不同的功效
  • 建议把装备、药水瓶、食物和冒险者都看作是价值体 (commodity)
  • 建议引入Commodity接口来建立行为层次关系
  • 冒险者 Adventurer 类、装备 Equipment 类、药水瓶 Bottle 类、食物 Food 类实现该接口
  • 装备和药水瓶的细分,建议通过继承实现