• 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");
        }
    }
  • 相关阅读:
    深漂一年,一位程序员的2016年终告白
    Springlake-02 权限&文档设置&Role设置&Folder设置&登录
    Springlake-01 介绍&功能&安装
    IOS Socket 03-建立连接与登录
    IOS Socket 02-Socket基础知识
    IOS Socket 01-网络协议基础知识
    IOS Animation-CAKeyframeAnimation例子(简单动画实现)
    IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合
    IOS Animation-动画基础、深入
    IOS Animation-CABasicAnimation例子(简单动画实现)
  • 原文地址:https://www.cnblogs.com/a842297171/p/5142617.html
Copyright © 2020-2023  润新知