精华内容
下载资源
问答
  • 父类构造器

    2018-04-13 23:23:00
    在创建java对象时,程序会依次调用每个父类的非静态初始化块、构造器。然后才调用本类的非静态...1.子类构造器执行体内第一行代码使用super显式调用父类构造器,系统根据传入的参数列表决定调用父类的哪个构造器。...

    在创建java对象时,程序会依次调用每个父类的非静态初始化块、构造器。然后才调用本类的非静态初始化块。

    显示调用与隐式调用

    上诉第一个调用方式为隐式调用,而父类的静态初始化块总会被执行,接着会调用父类的一个或多个构造器执行初始化,这个调用既可以是隐式的也可以是显示调用,通过super();

    1.子类构造器执行体内第一行代码使用super显式调用父类构造器,系统根据传入的参数列表决定调用父类的哪个构造器。

    2.子类构造器执行体内第一行代码使用this显示调用本类中重载的构造器,系统将根据参数列表调用本类的另一个构造器。

    3.子类构造器中既没有super也没有this,则隐式调用父类的无参数构造器。

    只在构造器第一行有用,及super与this只能执行一个。

    展开全文
  • 子类构造器调用父类构造器的顺序问题.pdf
  • 一 super调用父类构造器 子类构造器总会调用父类构造器。 如果子类构造器没有显示使用super调用父类构造器,子类构造器默认会调用父类无参构造器。 创建一个子类实例时,总会调用最顶层父类构造器。 二 构造器...

    一 super调用父类构造器

    • 子类构造器总会调用父类构造器。
    • 如果子类构造器没有显示使用super调用父类构造器,子类构造器默认会调用父类无参构造器。
    • 创建一个子类实例时,总会调用最顶层父类构造器。

    二 构造器调用顺序示例

    1 代码示例

    class Creature
    {
    	public Creature()
    	{
    		System.out.println("Creature无参数的构造器");
    	}
    }
    class Animal extends Creature
    {
    	public Animal(String name)
    	{
    		System.out.println("Animal带一个参数的构造器,"
    			+ "该动物的name为" + name);
    	}
    	public Animal(String name , int age)
    	{
    		// 使用this调用同一个重载的构造器
    		this(name);
    		System.out.println("Animal带两个参数的构造器,"
    			+ "其age为" + age);
    	}
    }
    public class Wolf extends Animal
    {
    	public Wolf()
    	{
    		// 显式调用父类有两个参数的构造器
    		super("大灰狼", 3);
    		System.out.println("Wolf无参数的构造器");
    	}
    	public static void main(String[] args)
    	{
    		new Wolf();
    	}
    }

    2 运行结果

    Creature无参数的构造器

    Animal带一个参数的构造器,该动物的name为大灰狼

    Animal带两个参数的构造器,其age为3

    Wolf无参数的构造器

    3 结果分析

    从运行结果来看,创建任何对象总是从该类所在继承树最顶层的构造器开始执行,然后依次向下执行,最后才执行本类的构造器,如果其个父类通过this调用同类中的构造器,就会依次执行父类的多个构造器。

    展开全文
  • 子类不能继承父类的构造...如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。 class SuperClass { private int n; Su...

    子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。

    如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

    class SuperClass {
      private int n;
      SuperClass(){
        System.out.println("SuperClass()");
      }
      SuperClass(int n) {
        System.out.println("SuperClass(int n)");
        this.n = n;
      }
    }
    class SubClass extends SuperClass{
      private int n;
      
      SubClass(){
        super(300);
        System.out.println("SubClass");
      }  
      
      public SubClass(int n){
        System.out.println("SubClass(int n):"+n);
        this.n = n;
      }
    }
    public class TestSuperSub{
      public static void main (String args[]){
        SubClass sc = new SubClass();
        SubClass sc2 = new SubClass(200); 
      }
    }
    输出结果:
    SuperClass(int n)
    SubClass
    SuperClass()
    SubClass(int n):200

    子类在实例化时,会自动调用父类的构造函数,但是不会实例化父类对象,一共只产生一个对象。这个过程中调用父类构造器是要完成对父类逻辑中的初始化工作而已。

    转载于:https://www.cnblogs.com/thiaoqueen/p/8034820.html

    展开全文
  • 不管是否使用super调用来执行父类构造器的初始化代码,子类构造器总会调用父类构造器一次。子类构造器调用父类构造器分如下几种情况。 子类构造器执行体的第一行使用super显式调用父类构造器,系统将根据super调用...

    不管是否使用super调用来执行父类构造器的初始化代码,子类构造器总会调用父类构造器一次。子类构造器调用父类构造器分如下几种情况。

    • 子类构造器执行体的第一行使用super显式调用父类构造器,系统将根据super调用里传入的实参列表调用父类对应的构造器。
    • 子类构造器执行体的第一行代码使用this显式调用本类中重载的构造器,系统将根据this 调用里传入的实参列表调用本类中的另一个构造器。执行本类中另一个构造器时即会调用父类构造器。
    • 子类构造器执行体中既没有super调用,也没有this调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。

    不管上面哪种情况,当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行;不仅如此,执行父类构造器时,系统会再次上溯执行其父类构造器……依此类推,创建任何Java对象,最先执行的总是java.lang.Object类的构造器。

     

    /**
     * 说明:当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行
     * @author LiuYP_1024
     *
     */
    class Creature{
    	public Creature() {
    		System.out.println("Creature无参数的构造器");
    	}
    }
    
    class Animal extends Creature{
    	public Animal(String name) {
    		System.out.println("Animal带一个参数的构造器,该动物的name为"+name);
    	}
    	public Animal(String name,int age) {
    		//以下使用this调用同一个重载的构造器
    		this(name);
    		System.out.println("Animal带两个参数的构造器,其age为"+age);
    	}
    }
    
    public class Wolf extends Animal{
    	public Wolf() {
    		super("灰太狼",3);
    		System.out.println("Wolf无参数的构造器");
    	}
    	
    	public static void main(String[] arge) {
    		new Wolf();
    	}
    }
    

    运行结果如下:

    Creature无参数的构造器
    Animal带一个参数的构造器,该动物的name为灰太狼
    Animal带两个参数的构造器,其age为3
    Wolf无参数的构造器

     

    内容整理来源于:疯狂Java讲义

    展开全文
  • 在执行子类构造器之前,必须先执行父类构造器。在此其前提下总结以下几点: (1)编译器在运行子类构造器之前,必须先执行父类构造器;且调用父类构造器的语句必须在子类构造器的第一行。 (2)若父类只有无参构造器...
  • super调用父类构造器

    2021-03-26 08:52:15
    super调用父类构造器 特点: 子类的全部构造器默认一定会调用父类的无参数构造器 super(…):可以根据参数选择调用父类的某个构造器 public class TestDemo { public static void main(String[] args) { //创建对象...
  • java子类调用父类构造器函数

    万次阅读 多人点赞 2019-06-25 15:52:54
    java子类调用父类构造器函数详解
  • Java子类继承父类构造器

    千次阅读 2018-05-04 11:16:26
    2.子类与父类构造器执行顺序?二、创建父类创建父类Animal,有两个构造器class Animal{ private Integer high; public Animal() { System.out.println("Animal()"); } public Animal(Integer high)...
  • Java中调用父类构造器

    2018-07-24 21:41:29
    但是子类构造器可以调用父类构造器的初始化代码,类似于一个类中,构造函数的重载。在一个构造器中调用另一个重载的构造器使用this来完成,在子类中调用父类的构造器使用super关键字来完成。 使用super调用和使用...
  • package _01ToObject.MultiState; class Animal{ //字段,成员变量 String name; //方法 void eat() { System.out.println(" is ... System.out.println("空的Animal(),父类构造器"); } Animal(Stri...
  • java调用父类构造器

    千次阅读 2014-11-15 21:35:59
    子类不会获得父类的构造器,但子类构造器里可以调用父类构造器的初始化代码
  • 子类父类构造器初始化对象
  • 在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定...
  • 不管我们是否使用super调用来执行父类构造器的初始化代码,子类构造器总会调用父类构造器一次。子类构造器调用父类构造器分如下几种情况:1.子类构造器执行体的第一行使用super显式调用父类构造器,系统将根据super...
  • 子类不能继承父类的构造器,但是在子类生成实例的时候必然会先调用父类的构造器,也就是在子类...若父类的构造器是带参构造器,则子类的构造器必须显式地用super(xx)调用父类构造器;子类可继承父类非private及非fin...
  • Super关键字和调用父类构造器

    千次阅读 2016-10-24 15:52:00
    一、子类不会获得父类的构造器,但子类构造器里可以调用父类构造器初始化代码。 1.1 在一个构造器中调用另一个重载的构造器,使用this调用来完成。如下代码段:public class Component { private String name; ...
  • 子类如何继承父类构造器 规则:子类会默认继承父类的域和方法,也包括构造器。如果子类没有显示调用父类构造器,则自动调用父类的无参构造器;此时如果父类没有默认构造器,则编译器会报错。请看下面例子: class ...
  • 1、当创建任何Java对象时,程序总会先依次调用每个父类非静态初始化块(这个调用是隐式执行的,而且父类的静态初始化块总是会被执行)、父类构造器(总是从Objec开始)执行初始化,最后才调用本类 的非静态化初始块...
  • 目标:子类构造器中通过super(…)调用父类构造器 小结: 子类构造器的第一行可以通过super(…)根据参数匹配调用父类的构造器。 初始化继承自父类的成员变量数据。 public class TestDemo { public static void main...
  • 关于子类继承父类构造器 super问题 当子类想继承父类时,父类必须有无参的构造方法,如果不主动添加系统会默认添加一个无参的构造方法,此时子类可以顺利继承父类 但是当父类添加了一个带参的构造方法时,此时系统将...
  • 子类、父类构造器

    2018-11-26 16:53:27
    如果子类构造器没有显示地调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中有...父类没有无参构造器,子类构造器没有显示调用父类其他构造器,...
  • 最近在校招笔试中遇到好几次求子类、父类构造器执行顺序问题,基本能做出来,但有些复杂的也挺耗时。查了些资料,再结合自己做的测试,总结一下贴在这里。
  • 2、 父类构造器  当创建任何Java对象时,程序总会先依次调用每个父类的非静态初始化块、构造器(总是从Object类开始)执行初始化,然后才调用本类的非静态初始化块、构造器执行初始化过程。 2、1 隐式调用与显示...
  • 子类调用父类构造器 重写父类方法子类扩展了父类,子类是一个特殊的父类。大部分时候,子类总是以父类为基础,额外增加新的成员变量和方法。但有一种情况例外:子类需要重写父类的方法。例如鸟类都包含了飞翔方法,...
  • 父类构造器调用被子类重写的方法 一、实例 package java022; class Animals{ private String desc; public Animals(){ this.desc = getDesc(); //②、 } public String getDesc(){ return "Animal"; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 230,727
精华内容 92,290
关键字:

父类构造器