Java基础教程——抽象类
抽象类
抽象类是介于普通类(class)和接口(interface)之间的一种特殊类。
接口的方法都不实现,类的方法都必须实现,抽象类里的方法可以实现,可以不实现。
Java 8之后接口中可以实现方法,抽象类的地位有点尴尬,不过因为历史代码中很多抽象类的应用,抽象类的概念也不会被淘汰。
抽象方法:只有方法签名,没有方法实现,必须有abstract修饰。
其实interface中的方法都是抽象方法,但正因为都是,所以不需要刻意声明为abstract。
public abstract void 抽象方法(int 参数1, String 参数2);
抽象类:
- 声明为abstract的类是为“抽象类”
- 有抽象方法的类必须声明为抽象类,但抽象类可以没有抽象方法
- 抽象类不能被实例化,只能被继承;抽象类也是类,不能同时继承多个抽象类
- 抽象类可以有构造方法,用于被子类调用。
public abstract class 抽象类 {
public abstract void 抽象方法(int 参数1, String 参数2);
public void 非抽象方法() {
System.out.println("非抽象方法有用括号括起来的方法体");
}
}
抽象类的作用
从语义的角度看,抽象类是从多个具体类中抽象出的父类,以抽象类为模板,可以避免子类设计的随意性。
也是为了规范。
示例:
所有动物都需要吃,父类中可以统一实现;但是——
犬科攻击动口,猫科攻击动手,在父类中不方便统一实现。此时建议在父类中定义为“抽象方法”

public class 抽象类 {
public static void main(String[] args) {
Animal _charger = new 猫();
_charger.攻击();
}
}
abstract class Animal {
public void 吃() {
System.out.println("吃");
}
public abstract void 攻击();
}
class 猫 extends Animal {
public void 攻击() {
System.out.println("扑,拍,咬");
}
}
class 犬 extends Animal {
public void 攻击() {
System.out.println("咬");
}
}
抽象类 VS 接口
相同点:
|-包含未实现的方法(或者说,都包含抽象方法)
|-本身不能实例化(都没有完全实现)
不同点:
| 接口 | 抽象类 |
|---|---|
| 不能包含普通方法(不算默认方法) | 可以包含普通方法 |
| 可以实现多个 | 只能继承一个(毕竟也是类) |
| 只能定义“常量”,不能定义普通成员变量 | 可以定义普通成员变量 |
| 没有构造方法 | 有构造方法 |
| 不能定义初始化块 | 可以定义初始化块 |
面向对象小结:

面向对象相关单词:
| 英文 | 中文 |
|---|---|
| Object-Oriented | 面向对象 |
| object | 对象 |
| class | 类 |
| property | 属性 |
| constructor | 构造函数/方法 |
| abstraction | 抽象 |
| encapsulation | 封装 |
| inheritance | 继承 |
| polymorphism | 多态 |
| interface | 接口 |
| overload | 重载 |
| override | 重写 |

浙公网安备 33010602011771号