zoukankan      html  css  js  c++  java
  • 继承时候的构造方法问题

    1.抽象类的有参构造方法的作用是通过实现类给抽象类的非抽象方法传参
    2.子类继承父类后,子类的构造方法会默认调用父类的无参构造方法
    3.如果父类只拥有有参构造方法,而没有写无参构造方法,此时父类就只有有参的构造 方法,所以在子类的构造方法中,必须显示的调用父类的有参构造方法,并且是在子类构造方法的第一行调用,否则会报错.
    4.因为在新建子类对象时,要先执行父类的构造方法,再执行子类的构造方法
    5.父类属性和子类属性可以重名,互不影响,重名后在子类中如果未指定super.默认使用的是子类的变量或方法
    6.要在子类中重写父类的属性,在子类的构造方法中使用super.属性名设置
    7.继承中的属性值初始化顺序

    ① 父类的静态属性显式赋值 或 父类的静态代码块执行
    ② 子类的静态属性显式赋值 或 子类的静态代码块执行
    ③ 父类的属性显式赋值 或 父类的成员代码块执行
    ④ 父类的构造方法执行
    ⑤ 子类的属性显式赋值 或 子类的成员代码块执行
    ⑥ 子类的构造方法执行
    以下代码会执行子类中的a1方法,因为要先执行父类的构造方法,所以子类的显示赋值和构造方法还没来得及执行,a1就已经执行完了,所以num和name都没有赋上值

    class A{
        public String name = "zhangsan";
        public A() {
            a1();
        }
        public void a1() {
            System.out.println("a1");
        }
    }
    public class B extends A{
        public String name = "lisi";
        int num = 0;
        public B() {
            num = 100;
        }
        public void a1() {
            System.out.println(num); // 0
            System.out.println("BBB");
            System.out.println(name); //null
        }
    
        public static void main(String[] args) {
            B b = new B();
        }
    }
    
  • 相关阅读:
    android高级页面效果集锦
    2018年Android的保活方案效果统计
    程序员如何预估自己的项目开发时间?
    Google开发者大会:你不得不知的Tensorflow小技巧
    练就Java24章真经—你所不知道的工厂方法
    一个完整Java Web项目背后的密码
    怎么捕获和记录SQL Server中发生的死锁
    使用跟踪标志位分析死锁
    通过SQL Server Profiler来监视分析死锁
    SQL Server中的死锁
  • 原文地址:https://www.cnblogs.com/zhz-8919/p/10783747.html
Copyright © 2011-2022 走看看