java 中的继承

1、继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力

  • 继承是面向对象最显著的一个特性
  • 子类又被称为派生类; 父类又被称为超类(Super Class)
  • 子类即使不扩充父类,也能维持父类的操作
  • 子类实际上是将父类定义的更加的具体化的一种手段
  • 父类表示的范围大,而子类表示的范围小
  • Java之中只允许多层继承,不允许多重继承,Java存在单继承局限

2、默认情况下,子类会找到父类之中的无参构造方法

  • 如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化
  • 再调用子类构造,为子类之中的属性初始化
  • 子类的构造而言,就相当于隐含了一个super()的形式
  • 如果这个时候父类没有无参构造,则子类必须通过super()调用指定参数的构造方法
  • super调用父类构造时,一定要放在构造方法的首行

3、规律总结一:

         A:访问成员变量的原则:就近原则。
         B:this和super的问题:
             this     访问本类的成员
             super    访问父类的成员(可以理解为的)
         C:子类的所有构造方法执行前默认先执行父类的无参构造方法。
         D:一个类的初始化过程:
             成员变量进行初始化过程如下:
                 默认初始化
                 显示初始化
                 构造方法初始化

4、规律总结二:

         A:一个类的静态代码块,构造代码块,构造方法的执行流程:
             静态代码块 > 构造代码块 > 构造方法
         B:静态的内容是随着类的加载而加载,
             即:静态代码块的内容会优先执行。
         C:构造代码块
            在类中方法外出现(即类中的成员位置),把多个构造方法方法中相同的代码存放到一起,用于对象进行初始化,
             每次调用构造方法都执行,并且在构造方法前执行。
         C:子类的所有的构造方法默认都会去访问父类的无参构造方法。

5、规律总结三:

         A:成员变量的问题
             int x = 10; //成员变量x是基本类型
             Student s = new Student(); //成员变量s是引用类型
         B:一个类的初始化过程
             先进行成员变量的初始化:
                 默认初始化
                 显示初始化
                 构造方法初始化
         C:子父类的初始化(分层初始化)
             先进行父类初始化,然后进行子类初始化。
class X {
    //成员变量(引用类型)
    Y b = new Y();
    //无参构造方法
    X() {
        System.out.print("X");
    }
}

class Y {
    //无参构造方法
    Y() {
        System.out.print("Y");
    }
}

public class Z extends X {
    //成员变量(引用类型)
    Y y = new Y();
    //无参构造方法
    Z() {
        //super(); //它仅仅表示要先初始化父类数据,再初始化子类数据。
        System.out.print("Z");
    }
    public static void main(String[] args) {
        new Z();  //执行结果:YXYZ
    }
}

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1824273