zoukankan      html  css  js  c++  java
  • 多层次继承,构造器之间的调用顺序!

    import static java.lang.System.*;
    class Creature{
        public Creature(){
            out.println("Creature类无参数的构造器!");  
        }
    }
     
    class Animal extends Creature{
        public Animal(){
            out.println("Animal类无参数的构造器!");
        }
    
        public Animal(String name){
            out.println("Animal类一个参数的构造器:name="+name);
        }
         
        public Animal(String name,int age){
            //-用this访问本类中一个参数的构造器
            this(name);
            out.println("Animal类两个参数的构造器:name="+name+",age="+age);
        }
    }
     
    public class Wolf extends Animal{
        public Wolf(){
            //-用super限定访问父类中两个参数的构造器
            super("张三",33);
            out.println("Wolf类无参数的构造器");
        }
     
        public static void main(String[] args){
            Wolf w=new Wolf();
        }
    }
    

    运行结果:

    代码稍加改动后:

    import static java.lang.System.*;
    class Creature{
        public Creature(){
            out.println("Creature类无参数的构造器!");  
        }
    }
     
    class Animal extends Creature{
        public Animal(){
            out.println("Animal类无参数的构造器!");
        }
    
        public Animal(String name){
            out.println("Animal类一个参数的构造器:name="+name);
        }
         
        public Animal(String name,int age){
            //-用this访问本类中一个参数的构造器
            this(name);
            out.println("Animal类两个参数的构造器:name="+name+",age="+age);
        }
    }
     
    public class Wolf extends Animal{
        public Wolf(){
            //-去掉:用super限定访问父类中两个参数的构造器
            //super("张三",33);
            out.println("Wolf类无参数的构造器");
        }
     
        public static void main(String[] args){
            Wolf w=new Wolf();
        }
    }
    

     运行结果:

    知识要点:

    1、创建任何对象,总是从该类继承树最顶层类的默认构造器开始执行,然后依次向下执行,最后才执行本类的构造器。

    2、如果某个类没有指定引用哪个构造器,则默认引用无参数的构造器,如果该类没有无参数的构造器,则编译报错,如下:。

    import static java.lang.System.*;
    class Creature{
        public Creature(){
            out.println("Creature类无参数的构造器!");  
        }
    }
     
    class Animal extends Creature{
    
        public Animal(String name){
            out.println("Animal类一个参数的构造器:name="+name);
        }
         
        public Animal(String name,int age){
            //-用this访问本类中一个参数的构造器
            this(name);
            out.println("Animal类两个参数的构造器:name="+name+",age="+age);
        }
    }
     
    public class Wolf extends Animal{
        public Wolf(){
            //-去掉:用super限定访问父类中两个参数的构造器
            //super("张三",33);
            out.println("Wolf类无参数的构造器");
        }
     
        public static void main(String[] args){
            Wolf w=new Wolf();
        }
    }
    

     编译报错:

  • 相关阅读:
    Chrome开发者工具详解(1)Elements、Console、Sources面板
    在Mac下运行ASP.NET Core应用程序
    网络性能优化实战
    Chrome开发者工具详解(5)Application、Security、Audits面板
    Chrome开发者工具详解(3)Timeline面板
    Chrome开发者工具详解(2)Network面板
    Chrome开发者工具详解(4)Profiles面板
    1.1专题介绍「深入浅出ASP.NET Core系列」
    1.2环境安装「深入浅出ASP.NET Core系列」
    1.3创建项目「深入浅出ASP.NET Core系列」
  • 原文地址:https://www.cnblogs.com/baby-zhude/p/8029971.html
Copyright © 2011-2022 走看看