抽象函數的作用有很多,我就舉一個例子,(mars老師的例子):
打印機:
父類---Printer
子類---HBPrinter
子類----CanonPrinter
測試類----Test
//定義一個打印機類
abstract class Printer{
//定義三個成員函數
void open(){
System.out.println("open");
}
void close(){
System.out.println("close");
}
abstract void print();
}
//定義一個HB(惠普)打印機
class HBPrinter extends Printer{
//復寫Printer的print
void print(){
System.out.println("我是惠普打印機");
}
}
//定義一個佳能打印機
class CanonPrinter extends Printer{
//復寫Printer的print方法
void print(){
System.out.println("我是佳能打印機");
}
}
//測試函數
class Test{
public static void main(String args [] ){
//向上轉型
Printer p1 = new HBPrinter();
p1.open();
p1.print();
p1.close();
Printer p2 = new CanonPrinter();
p2.open();
p2.print();
p2.close();
}
}
結果
F:\work\src>javac *.java
F:\work\src>java Test
open
我是惠普打印機
close
open
我是佳能打印機
close
F:\work\src>
如果父類Printer沒有用abstract其方法print也沒用abstract,那么當其子類有很多時,突然某一個子類忘記復寫print()方法,
那么問題就出現了:可以正常運行,但是打印有問題,不知道哪里出錯了,
而當有用抽象,那么其子類忘記復寫時,就會出錯,提示哪一個有問題,就可以bug