Java 抽象类 abstract关键字
抽象类前使用abstract关键字修饰,则该类为抽象类
抽象的方法是不完全的,它只是一个方法签名而完全没有方法体
抽象的方法没有花括号
继承抽象类的子类必须覆盖父类的抽象函数(即:子类继承抽象类以后,抽象类里面所有的抽象函数都必须要被子类所实现),否则这个类自己就成为抽象类
应用:
- 在某种情况下,某个父类只知道子类应该包含什么方法,但无法准确地知道子类如何实现这些方法
- 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性
目的/作用:不关注子类的实现,但会约束子类,必须有哪类特征 /限制规定子类必须实现某种方法,但不关注实现细节
使用规则:
- abstract定义抽象类
- abstract定义抽象方法,只声明,不需要实现
- 包含抽象方法的类就是抽象类 (即:如果自身声明了一个抽象方法,这个类必须是抽象类)
- 抽象类中可以包含普通方法,也可以没有抽象方法
- 抽象类不能直接创建,定义一个引用变量指向一个子类的对象
例:
abstract class Telphone{ //此父类只是用来约束子类,所以可以定义成抽象类
public abstract void call(); //在抽象类里若想要约束子类,就可定义为抽象方法 抽象方法没有方法体以分号结束
public abstract void message();
}
class Cellphone extends Telphone{
public void call(){ //实现抽象类里要求的方法call
System.out.println("通过键盘来打电话");
}
public void message(){ //实现抽象类里要求的方法message
System.out.println("通过键盘来发短信");
}
}
class Smartphone extends Telphone{
public void call(){
System.out.println("通过语音来打电话");
}
public void message(){
System.out.println("通过语音来发短信");
}
}
class Ex17{
public static void main(String[] args){
Telphone tel1=new Cellphone(); //抽象类的父类引用指向一个子类对象,先创建一个普通的电话的对象
tel1.call(); //通过引用就可以打电话
tel1.message(); //通过引用就可以发短信
Telphone tel2=new Smartphone(); //通过父类的引用指向智能手机的对象
tel2.call();
tel2.message();
}
}