为什么要用抽象类

抽象是个什么概念?

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


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

假如忘了复写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();
        }
}
输出结果:

Open
Close
Open
使用针式打印机进行打印
clean
Close
可以发现,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 错误
总结:

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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值