JavaSE-子类实例化对象的过程

package com.btp.t1;
//子类对象实例化的全过程
/*1.当最底层子类实例化对象时,它的父类,父类的父类...到Object类的所有类的构造器都会被调用,只不过当一个类拥有多个构造器时,调用的是其中一个。
 *2.子类构造器内,默认调用父类构造器:super();当有this关键字时,就不调用父类构造器了,就会调用同一个类内的其他构造器,所以一个类当有n个构造器时,仅允许最多有n-1个构造器内使用this关键字,最少有一个构造器去调用上层父类的构造器。
 *3.当父类重载一个构造器,则默认的无形参构造器就会消失,父类又不重载另一个无形参的构造器,那么子类构造器不使用this或super关键字就会出错,因为子类构造器不使用this和super关键字,默认调用父类的无形参构造器,而这个构造器不存在,就会出错,解决办法:1)父类声明一个无形参的构造器2)调用父类另一个参数不为空的构造器
 *4.所以建议:创建类时,都创建一个无形参的构造器
 *5.当有类实例化对象时,Object类的无形参构造器一定会被调用。
 * 
 */
public class Parent {
   public static void main(String args[])
   {
//       Dog d=new Dog();
//       d.setAge(10);
//       d.setName("花花");
//       d.setHostName("小明");
       Dog d=new Dog("小黑","狗狗",12);
       
       System.out.println("name:"+d.getName()+"年龄:"+d.getAge()+"主人:"+d.getHostName());
   }
}


class Creator
{
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Creator() {//可以试试把这个构造器注释掉
        super();
        System.out.println("This is Creator's ()constructor");
    }
    public Creator(int age) {
        super();
        this.age=age;
        System.out.println("This is Creator's (int)constructor");
    }
    
}

class Animal extends Creator
{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Animal() {
//默认super();
       System.out.println("This is Animal's ()constructor");
    }
    public Animal(String name,int age) {
        super(age);
        this.name=name;
        System.out.println("This is Animal's (String,int)constructor");
    }
    
}

class Dog extends Animal
{
    private String hostName;

    
    public String getHostName() {
        return hostName;
    }
    

    public void setHostName(String hostName) {
        this.hostName = hostName;
    }

    public Dog() {
        super();
        System.out.println("This is Dog's ()constructor");
    }
    
    public Dog(String hostname,String name,int age) {
        super(name,age);
        this.hostName=hostname;
        System.out.println("This is Dog's (String,String,int)constructor");
    }
}

 

posted @ 2016-01-19 16:33  GGRoddick  阅读(751)  评论(0编辑  收藏  举报