Object-Oriented Programming (OOP)面向对象的编程
Interface接口
接口:确定ADT规约
接口之间可以继承与扩展
一个类可以实现多个接口(从而具备了多个接口中的方法)
一个接口可以有多种实现类
倾向于使用接口来定义变量
接口中的每个方法在所有类中都要实现
通过default方法,在接口中统一实现某些功能,无需在各个类中重复实现它。
以增量式的为接口增加额外的功能而不破坏已实现的类
重写(Overriding)
严格继承:子类只能添加新方法,无法重写超类中的方法
如果想要一个java中方法不能被重写,必须要加上前缀final
父类型中的被重写函数体不为空:意味着对其大多数子类型来说,该方法是可以被直接复用的。对某些子类型来说,有特殊性,故重写父类型中的函数,实现自己的特殊要求
如果父类型中的某个函数实现体为空,意味着其所有子类型都需要这个功能,但各有差异,没有共性,在每个子类中均需要重写
重写时,可以利用super()来复用父类型中函数的功能,并对其进行扩展
抽象类(Abstract Class)
抽象方法:只有声明没有具体实现的方法。用关键词abstract来定义
抽象方法的 3 个特征如下:
- 抽象方法没有方法体
- 抽象方法必须存在于抽象类中
- 子类重写父类时,必须重写父类所有的抽象方法
注意:在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的
抽象类:如果一个类含有至少一个抽象方法,则被称为抽象类
抽象类的定义和使用规则如下:
- 抽象类和抽象方法都要使用 abstract 关键字声明。
- 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。
- 抽象类不能实例化,也就是不能使用 new 关键字创建对象。
接口:一个只含有抽象方法的抽象类
Three Types of Polymorphism (多态)
特殊多态和重载(Overloading)
重载:多个方法具有同样的名字,但有不同的参数列表或返回值类型
重载🆚重写
重载是在一个类中定义相同名字但参数不同的多个方法,调用时根据不同参数的表达来选择对应的方法,重载方法可以修改返回类型,也可以修改访问权限,不能只修改这两者,反正能够区分方法不混淆就可以。
重载时如果参数设置不当,也会造成混淆,比如(int, long)和(long, int)重载,当调用实参为(1, 1)时就会混淆
重写是子类覆盖父类的方法逻辑,和父类被重写方法具有相同的方法名称、参数列表和返回类型,不能使用更严格的访问权限,比如,父类public,子类不能是private
泛型Generics
使用“<>”,帮助声明泛型变量
List<Integer> ints = new ArrayList<Integer>();
public interface List<E>
public class Entry<KeyType, ValueType>