zoukankan      html  css  js  c++  java
  • Java子类继承父类执行顺序

    new一个类对象,类中各部分执行顺序:静态代码块->非静态代码块->构造函数->一般方法。

    public class father {
        
        private String name;
    
        father(){
           System.out.println("--父类的无参构造函数--");
        }
    
        father(String name){
           this.name=name;
           System.out.println("--父类的有参构造函数--"+this.name);
        }
    
        static{
           System.out.println("--父类的静态代码块--");
        }
    
        {
           System.out.println("--父类的非静态代码块--");
        }
    
        public void speak(){
           System.out.println("--父类的方法--");
        }
    
        public static void main(String[] args) {
            System.out.println("--父类主程序--");
            father father=new father("父亲的名字");
            father.speak();
         }
        
    }

    运行如上main方法结果为:

    创建子类继承该父类测试执行顺序:

    public class Son extends father{
         private String name;
    
            static{
               System.out.println("--子类的静态代码块--");
            }
    
            {
               System.out.println("--子类的非静态代码块--");
            }
    
            Son(){
               System.out.println("--子类的无参构造函数--");
            }
    
            Son(String name){
               this.name=name;
               System.out.println("--子类的有参构造函数--"+this.name);
            }
    
            @Override
            public void speak(){
               System.out.println("--子类Override了父类的方法--");
            }
    
            public static void main(String[] args) {
                   System.out.println("--子类主程序--");
    
                   Son son=new Son("儿子的名字");
                   son.speak();
            }
    }

    运行如上main方法结果如下:

    运行如下main方法:

    public static void main(String[] args) {
          System.out.println("--子类主程序--");
    
          Son son=new Son("儿子的名字");
          son.speak();
    
          father father=new father("父亲的名字");
          father.speak();
    }

    结果如下:

    总结:

    new一个类对象,类中各部分执行顺序:静态代码块->非静态代码块->构造函数->一般方法。

       子类继承父类各部分执行顺序为:父静态代码块->子静态代码块->父非静态代码->父无参构造函数->子非静态代码块->子构造函数->方法。

    注意:创建子类对象调用子类的构造方法的时候会先调用父类的构造方法,在子类的构造方法中调用父类的构造方法是用super(),如果没有写super(),则默认调用父类的无参构造方法。

  • 相关阅读:
    [Go] golang http下返回json数据
    [Go] Golang练习项目-邮箱imap网页版客户端工具
    [Go] 提供http服务出现两次请求以及处理favicon.ico
    [Go] 转换编码处理网页显示乱码
    [Go] go转换gbk为utf8
    [Go] golang x.(type) 用法
    [GO] go语言中结构体的三种初始化方式
    [PHP] create_function() 代码注入问题已经被弃用
    [Git] 彻底删除github上的某个文件以及他的提交历史
    [javascript] vuejs的elementui实现父子iframe通信
  • 原文地址:https://www.cnblogs.com/47Gamer/p/13900966.html
Copyright © 2011-2022 走看看