为什么要用抽象类

来源:互联网 发布:王牌特工2 知乎 编辑:程序博客网 时间:2024/05/29 08:15

抽象是个什么概念?

比如电脑就是一个抽象的概念,可以理解为一个抽象类。因为电脑可以分为笔记本电脑,台式机,掌上电脑等等。


使用抽象类可以防止出现一些错误:

假如忘了复写Hp打印机的print函数,编译不会报错,这时print就不会被调用,这就会导致功能型错误。

class Printer{    void open(){        System.out.println("Open");    }    void close(){        System.out.println("Close");    }    void print(){//没有定义为抽象函数    }}
子类没有复写

//该打印机为喷墨打印机class HpPrinter extends Printer{}
另一个子类:

//该打印机为针式打印机class CannoPrinter extends Printer{    void print(){//复写        System.out.println("使用针式打印机进行打印");    }        void close(){        this.clean();        super.close();    }        void clean(){        System.out.println("clean");    }}
class Test{    public static void main(String args[]){            Printer printer1 = new HpPrinter();            printer1.open();            printer1.print();            printer1.close();                        Printer printer2 = new CannoPrinter();            printer2.open();            printer2.print();            printer2.close();        }}
输出结果:

OpenCloseOpen使用针式打印机进行打印cleanClose
可以发现,Hp打印机的print没有被调用到。但是编译没有报错。。。

为了提到警示作用,这时抽象类的作用来了。将Printer定义为抽象类。如果没有复写print方法,编译其就会帮助提示报错。。

abstract class Printer{    void open(){        System.out.println("Open");    }    void close(){        System.out.println("Close");    }/*    void print(){    }*/    abstract void print();//定义为抽象函数}
如果和上面一样没有实现复写,编译会错误:

HpPrinter.java:2: HpPrinter 不是抽象的,并且未覆盖 Printer 中的抽象方法 print()class HpPrinter extends Printer{^1 错误
总结:

如果类中有个函数需要子类进行复写,那么这个函数写为抽象的是最好的






原创粉丝点击