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 | 重写 |