初始化:
子类继承父类时,子类必须在自己的构造函数中通过super()调用父类的构造函数以完成对父类成员属性的初始化。且该spuer()方法必须放在自己构造方法的第一行以保证最先初始化父类成员字段属性。
访问权:
子类继承父类时,子类可以继承父类所有东西,比如,父类的成员属性、方法等,只不过有些东西被父亲上了锁(这是父亲的隐私,父亲不想儿子发现自己的小秘密)有些没有上锁,而那些被private关键字修饰的属性和方法子类可以拥有却无法使用,因为private所修饰的东西,只在本类有效。
继承抽象类:
继承过程中经常存在这样一种情况,父类是抽象类,由于抽象类并不是完全抽象的,其中可以存在非抽象的方法,所以,子类继承抽象类父类时,子类可以继承抽象父类的非抽象的方法,但父类的抽象方法,子类继承之后必须重写以实现具体内容,因为普通类是不允许存在抽象方法的。
继承的抽象类实现了一个接口:
由于接口是完全抽象的(方法都是抽象的,不允许存在普通方法),而抽象类是部分抽象,两者都具有抽象能力,也就是说,两者都能容纳抽象方法,只不过接口中所有方法都隐藏了public abstract的修饰前缀,而抽象类中的方法为了区分普通方法并未去掉,因此,当一个抽象类实现一个接口时,则会出现以下几中情况:
1、抽象类一个都不实现接口中的方法
这种情况下,如果一个普通类来继承该抽象类,子类必须完成父类义务,实现接口的所有方法
2、抽象类部分实现接口中的方法
这种情况下,如果一个普通类来继承该抽象类,子类同样必须完成父类未尽的义务,实现哪些接口中未被父类实现的方法
3、抽象类全部实现接口中的方法
这种情况下,如果一个普通类来继承该抽象类,子类则啥事不用做,坐等现成,除非自己闲的没事干,对父类提供的现成方法不满意,想要自己重写。
那么抽象类实现接口有哪些好处呢?
1、扩展接口的适用性,减少代码冗余。例如,如果我只想实现接口中的某一个方法,普通类需要全部实现,造成代码冗余,而抽象类则可以想实现哪个就实现哪个。
2、给普通类提供了多种选择。以前普通类想拥有接口中的方法必须去实现该接口,现在,子类可以通过继承一个中间的抽象类也能达到一样的效果。