java抽象类

其实是在百度知道上的一段回答。自我感觉挺良好的,所以记录下来。

提问

“为了保证非抽象子类重写抽象方法: 抽象类可以不包括抽象方法 但是含有抽象方法的类必须是抽象类”,这句话怎么理解呢?

回答

抽象类是指不允许被实例化的类;抽象方法是没有方法体的方法。

  1. 抽象类可以不包括抽象方法,它反正不会去实例化,里面的方法是不是抽象的没有本质影响。
  2. 但是含有抽象方法的类绝不能被实例化,否则执行这个方法的时候,怎么办?
  3. 如果子类是非抽象的,那么它就必须实现父类中的抽象方法;否则,它继承来的抽象方法仍然没有方法体,也是个抽象方法,此时就与“含有抽象方法的类必须是抽象类”相矛盾了。

比如说,我在纸上画一个饼(抽象类),饼有个“吃到嘴里沾一嘴芝麻”的方法。我可以在饼上画几个点假装是芝麻,这时候“沾芝麻方法”就是个抽象方法,因为它不会真的掉芝麻;我也可以在饼上蘸点儿真芝麻,这时候“沾芝麻方法”就是个有实现的方法。但是用哪个方法都可以,因为没人会去真的吃画的饼吧。

但我要真的去照着这个图烤一个饼(非抽象子类),那这个子类的“吃到嘴里沾一嘴芝麻”的方法就必须有具体的实现。否则烤出来,一吃,没芝麻啊!食客非上消协投诉不可。