抽象类
一个父类设计得非常抽象,以至于它都没有任何具体的实例。
- 至少包含一个抽象方法。
- 可以有数据域
- 不能用new操作符创建它的实例
- 构造方法定义为protected,因为它只被子类使用
为什么要用抽象方法
提供动态性,方法调用时JVM的动态绑定
关于抽象类的几个关注点
- 抽象方法不能包含在非抽象类中,抽象方法是非静态的
- 抽象类是不能使用new操作符来初始化
- 包含抽象对象的类必须是抽象的
- 即使子类的父类是具体的,这个子类也可以是抽象的
- 子类可以覆盖父亲的方法并将它定义为abstract
- 不能使用new操作符从跟一个抽象类创建一个实例,但是抽象类可以用作一种数据类型(动态性)
接口
是一种与类相似的结构,只包含常量和抽象方法。
注:
由于接口中所有的数据域都是public final static并且所有的方法都是public abstract,所以Java允许忽略这些修饰符。
接口与抽象类
/ | 变量 | 构造方法 | 方法 |
---|---|---|---|
抽象类 | 无限制 | 子类通过构造方法链调用构造方法, 抽象类不能用new操作符实例化 | 无限制 |
接口 | 所有的变量都是 public static final | 没有构造方法。接口不能用new操作符实例化 | 所有方法是公共的抽象实例方法 |
Java只允许类的扩展做单一继承,但是允许使用接口做多重扩展。
- 装箱 boxing
将基本类型转换为包装类对象的过程。
Integer[] array = {1, 2, 3};
- 开箱 unboxing
将包装类对象转换为基本类型的过程。
System.out.print(array[0] + array[1] + array[2]);