zoukankan      html  css  js  c++  java
  • 一个继承了抽象类的普通类的执行顺序

    今天看《java编程思想》抽象类那节的时候,做了一个练习题3(p171页),发现了一个很有意思的东西,一个继承了抽象类的普通类的执行顺序是怎样的呢?

    package JavaChoiceQuestion;
    
    /**
     * @Auther: 李景然
     * @Date: 2018/4/13 19:45
     * @Description:
     */
    
    
    //抽象类
    public abstract class AbstractClass {
        public static void main(String[] args){
            NotAbstractClass n=new NotAbstractClass();
            n.print();
        }
        public abstract void print();
        public AbstractClass(){
            print();
        }
    }
    
    //实现抽象类的普通类
    class NotAbstractClass extends  AbstractClass {
        private int num=1;
    
        public NotAbstractClass(){
        ...
        }
    
        public void print(){
            System.out.println(num);
        }
    }

    执行的结果是:

    0

    1

    分析:

    main函数执行的时候

    先执行main函数中的第一句:NotAbstractClass n=new NotAbstractClass();输出的是0.

    这一句的执行顺序如下:

      1、先进入到NotAbstractClass的构造函数,然后先去执行其父类的构造函数,父类的构造函数执行print()方法,但是子类实现了这个方法,所以会去执行System.out.println(num);这时的num还未进行赋值,所以此时num是默认值0.

      2、执行完父类的构造函数,会去执行子类的成员变量的初始化,这时会执行private int num=1;此时num被赋值为1,

      3、最后,执行子类构造函数中的代码...

    然后main函数执行第二句:n.print();,输出是1.

    总结,一个继承了抽象类的普通类的执行顺序是:父类的构造函数---子类成员变量的初始化---子类的构造函数

  • 相关阅读:
    Spring Cloud Hystrix Dashboard的使用 5.1.3
    Spring Cloud Hystrix 服务容错保护 5.1
    Spring Cloud Ribbon 客户端负载均衡 4.3
    Spring Cloud 如何实现服务间的调用 4.2.3
    hadoop3.1集成yarn ha
    hadoop3.1 hdfs的api使用
    hadoop3.1 ha高可用部署
    hadoop3.1 分布式集群部署
    hadoop3.1伪分布式部署
    KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
  • 原文地址:https://www.cnblogs.com/lijingran/p/8823921.html
Copyright © 2011-2022 走看看