1. 继承是java和所有的oop(面向对象)语言不可缺少的组成部分。我们在创建一个类的时候,除非明确的使用extend关键字指出继承那个类,否则都会去继承Object类,也可以说Object类是所以类的父类。而继承类(子类)则会得到基类(父类)中的所有方法和域<br />**继承的特性**:
    1. 子类拥有父类非 private 的属性、方法。
    2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
    3. 子类可以用自己的方式实现父类的方法。(重写)
    4. 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)

    继承中的初始化:
    Java中会自动在导出类的构造器中插入基类(父类)构造器的调用

    1. class Art{
    2. Art(){
    3. System.out.println("Art类的无参构造器");
    4. }
    5. }
    6. class Drawing extends Art{
    7. Drawing(){
    8. System.out.println("Drawing类的无参构造器");
    9. }
    10. }
    11. public class Cartoon extends Drawing{
    12. Cartoon(){
    13. System.out.println("Cartoon类的无参构造器");
    14. }
    15. public static void main(String[] args) {
    16. Cartoon cartoon = new Cartoon();
    17. }
    18. }
    19. Output
    20. Art类的无参构造器
    21. Drawing类的无参构造器
    22. Cartoon类的无参构造器

    我们可以发现,Java中会自动在导出类(new 出的类)的构造器中插入基类(父类)构造器的调用,且当多个类继承时,会先执行最顶级的基类的构造器。
    上面的代码中类的构造器是无惨的,如果是有参的呢?
    我们修改上面的代码,在每个类的构造器中都加入参数

    1. class Art{
    2. Art(String str){
    3. System.out.println(str+"类的无参构造器");
    4. }
    5. }
    6. class Drawing extends Art{
    7. Drawing(String str){
    8. super("Art");//如果没有super()则此类的有参构造方法会报错
    9. System.out.println(str+"类的无参构造器");
    10. }
    11. }
    12. public class Cartoon extends Drawing{
    13. Cartoon(String str){
    14. super("Drawing");//如果没有super()则此类的有参构造方法会报错
    15. System.out.println(str+"类的无参构造器");
    16. }
    17. public static void main(String[] args) {
    18. Cartoon cartoon = new Cartoon("Cartoon");
    19. }
    20. }

    我们发现,在Drawing和Cartoon类中的有参构造方法里面多啦一行suppe()这样的代码。所以当基类和子类的为有参构造器时,我们必须得在子类中显示的去调用父类得构造器,否则报错;如果基类中有无参构造器,子类可以不用显示的调用基类的构造器。