zoukankan      html  css  js  c++  java
  • 子类构造器调用父类构造器的顺序问题

    一 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调用同类中的构造器,就会依次执行父类的多个构造器。

  • 相关阅读:
    iOS开发拓展篇—音频处理(音乐播放器5)
    在Unity中接入Xbox360手柄
    POJ 2531 Network Saboteur(DFS)
    小塔1024实现
    Cocos2dx--开发环境搭建
    2.7 视图合并
    Cocos2d-X开发中国象棋《四》设计游戏场景
    libsqlite3.dylib与libsqlite3.0.dylib的差别
    AsyncTask
    开发,从需求出发 · 之二 造飞机的工厂
  • 原文地址:https://www.cnblogs.com/ainima/p/6331652.html
Copyright © 2011-2022 走看看