抽象类的抽象方法,子类必须实现。比如父类有的方法在设计时,并不知道该怎么写,而要留给子类去实现,但又必须实现。这样的强制性是普通类所不具备的。如:模板方法模式。http://www.blogjava.net/wintys/archive/2009/06/15/pattern_template_method.html
抽象类一般是基类,规定继承类有什么特性,要实现什么东西
看一下设计模式就知道有什么优势了。
一楼正解,抽象类和接口中不用实现方法,只是声明方法,好比灯泡的底座,没有灯泡但能够安装任意形状的灯泡(只要灯泡实现一个统一的接口),如果没有底座(抽象类或接口),那么所有的灯泡都要设计自己和电源连接的方式了。
确实可以用普通类来代替,但是普通类里的方法都要在子类中重新,这样的话,父类里的方法实现其实是没意义的。
使用抽象类或接口,扩展性要好。不然,后期维护很麻烦,使用了抽象类或接口,只需要在子类中重写就行。
抽象类与普通类的区别较大,因为抽象类的某些成员可以不实现,留给派生类来实现。
抽象类和接口在很多时候很像,区别在于接口可以实现多个,但如果采用抽象类,则只能继承一个
1.约束定义, 比如某个方法 是抽象方法,子类必须要实现
2.基类公共包装,比如,封装一个公共的Page基类,把某些公共方提出来,方法里全是 虚方法,都有自己的方法实现,但是这个是类是一个抽象,不能实例化,只能由子类来实例化,子类可以重写基类方法,也可以直接用基类方法。
上面两点有一个公共的特点,就是基类一般不能示例化,用途不一样,一种是子类必须实现,一种是基类实现了,子类可以改写。
完全是设计上的约束,普通类都可以通过new,生成具体的对象,抽象类不可以。
比如你女朋友给你说,给我买点吃的东西,你不可能屁颠屁颠就跑出去吧,你丫必须告诉我具体吃的东西是什么。
吃得东西是虚基,其他鸡腿,蛋糕都是它的子类。那吃得东西必须能吃,就起这个约束,以区别用的。你女朋友让你去买吃的,你就不能中途买个用的TT回来,那不和规矩,没看老娘那个来了么?