本帖最后由 斗胆潇洒 于 2013-8-27 00:45 编辑
1、一个类可以实现多个接口,但只能继承一个抽象类。
解析:java中对于类间关系要求只能单继承,抽象类也是类,也得遵循。单继承简单说就是,一个儿子不能有两个父亲,是横向来说的。
有A,B,C三个类,A继承B又继承C就不行。如果A继承了一个抽象类,就不能再继承了。语句 class A extends B,C 就是错的。
接口却可以多实现,也就是若B,C为接口,那么可以有class A implements B,C。多实现弥补下单继承。
2、在抽象类中声明的抽象方法,用派生类继承的时候,为什么要全部覆写其中的方法呢?
解析:简单了说,只有声明,没有实现体的抽象方法,也就是没有{}和里面的东西,不复写木有意义。
抽象类的抽象方法,即abstract的方法,就是只有声明木有实现的方法,如果不在子类中覆盖,给该抽象方法实现体,那么这抽象方法,就木有意义了。所以要覆盖抽象类的抽象方法。
而为什么子类要全部复写抽象方法呢?
抽象方法虽然没有实体,但已声明,因继承关系,子类可以调用父类的方法,如果在抽象类中有抽象方法a()和b(),你只覆盖了a,没有复写b,那么我在new 子类对象xx后,我可以xx.a(),也可以xx.b(),但b没有实现体,却又被你调用了,调用了个木有意义的方法,这是不可取的。为了避免上述情况,java要求,除了抽象类的非抽象方法,所有抽象方法,子类都得覆盖。而接口就全是抽象方法了,你一实现接口,那都得复写。 |