Java语言中的继承

继承

面向对象的计算机编程语言的三大特点:
继承,封装,多态
继承:即子类继承父类的除构造方法外的一切,可增加代码的复用率。
实现语法为:

   class 子类  **extend**  父类{
   //子类方法
   } 

继承的注意及特点:

  • 使用 extends 指定父类.

  • Java 中一个子类只能继承一个父类,Java为单继承或多级继承。 (而C++/Python等语言支持多继承).

  • 子类会继承父类的所有 public 的字段和方法.

  • 对于父类的 private 的字段和方法, 子类中是无法访问的.

  • 子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用.
     Super.成员方法 ——>调用父类成员方法
     Super.成员属性 ——>调用父类成原属性
     Super(参数) ——>调用父类的构造方法(必须放到第一行

  • 被fianl修饰的密封类不能被继承

  • Java中对于字段及方法的四种访问权限:(访问权限从上至下一次减小
     public:类内部以及内外部都能进行访问
     protected:类内部及不同包中的子类与其同一包中的类可以访问,其他类不能访问
     default(包访问权限,一般默认为其):类内部及同一包中的类可以访问,其他类不能访问
     private:只有类内部可以访问,其他类不能访问

  • Java中当实例化子类对象时,静态代码块只能初始化一次。
     1.即如果父类及当前类的静态代码块未加载过时,那么执行顺序是:
       父类静态初始化块——>子类静态初始化块——>父类非静态初始化块——>父类构造方法——>子类非静态初始化块——>子类构造方法
     2.如果父类及当前类的静态代码块已经被加载过,则执行顺序为:
       父类非静态初始化块——>父类构造方法——>子类非静态初始化块——>子类构造方法(静态代码块将不会被加载)

public class Parent {
    static {
        System.out.println("父类静态初始化块");
    }
    {
        System.out.println("父类非静态初始化块");
    }
    public Parent() {
        System.out.println("父类构造方法");
    }
    //方法与类名同名
    public int Parent() {
        return 0;
    }
    public static void main(String... args) {
        //第一次创建时类还没有被加载,会执行静态初始化块
        Child c = new Child();
        System.out.println();
        //第二次创建时类已经被加载,只执行非静态初始化块与构造方法
        Child d = new Child();
    }
}
class Child extends Parent {
    public Child() {
        System.out.println("子类构造方法");
    }
    static {
        System.out.println("子类静态初始化块");
    }
    {
        System.out.println("子类非静态初始化块");
    }
}
运行结果:
父类静态初始化块
子类静态初始化块
父类非静态初始化块
父类构造方法
子类非静态初始化块
子类构造方法

父类非静态初始化块
父类构造方法
子类非静态初始化块
子类构造方法

牛客网有关试题

发布了5 篇原创文章 · 获赞 7 · 访问量 275

猜你喜欢

转载自blog.csdn.net/qq_45611822/article/details/102989656