zoukankan      html  css  js  c++  java
  • 2020年8月13日 实例初始化方法 父子类实例初始化方法 (面试重点)

    package com.atguigu.test01.block;
    
    public class TestInit {
        public static void main(String[] args) {
            /*
            Father f = new Father();
            //父类的无参构造
            */
            
            /*
             * Son s = new Son();
             * 父类的无参构造
                子类的无参构造
             */
            
            //Son s2 = new Son("atguigu");
            /*
             * 父类的无参构造
            子类的有参构造
             */
            
            Son s3 = new Son("atguigu", 10);
            /*
             * 父类的无参构造
                子类的有参构造1
                子类的有参构造2
             */
        }
    }
    class Father{
        public Father(){
            System.out.println("父类的无参构造");
        }
    }
    class Son extends Father{
        private String str;
        private int num;
        
        public Son(){
            //隐含了super();  子类的构造器中一定会调用父类的构造器,默认调用父类的无参构造
            System.out.println("子类的无参构造");
        }
        
        public Son(String str){
            //隐含了super()
            this.str = str;
            System.out.println("子类的有参构造1");
        }
        
        public Son(String str,int num){
            this(str);
            this.num = num;
            System.out.println("子类的有参构造2");
        }
    }

    package com.atguigu.test01.block;
    
    /*
     * (1)先执行父类的实例初始化方法
     * 它由三部分:
     * ①成员变量的显式赋值
     * ②非静态代码块
     * ③构造器
     * (2)再执行子类的实例初始化方法
     * 它由三部分:
     * ①成员变量的显式赋值
     * ②非静态代码块
     * ③构造器
     * 
     * super()或super(实参列表)之前说的是调用父类的构造器,其实是调用父类对应的实例初始化方法
     * super()或super(实例列表)之前说的是在子类构造器的首行,其实是在子类实例初始化方法的首行
     */
    public class TestInit2 {
        public static void main(String[] args) {
            Zi z = new Zi();//312645
        }
    }
    class Fu{
        private String strFu = assignFu();
        {
            System.out.println("(1)父类的非静态代码块");
        }
        public Fu(){
            System.out.println("(2)父类的无参构造");
        }
        public String assignFu(){
            System.out.println("(3)父类的assignFu()");
            return "fu";
        }
    }
    class Zi extends Fu{
        private String strZi = assignZi();
        {
            System.out.println("(4)子类的非静态代码块");
        }
        public Zi(){
            //super()  ==>调用父类的实例初始化方法,而且它在子类实例初始化方法的首行
            System.out.println("(5)子类的无参构造");
        }
        
        public  String assignZi(){
            System.out.println("(6)子类的assignZi()");
            return "zi";
        }
    }

    图片中蓝色字体的部分重要,this在构造器,实例初始化方法中,代表的是正在创建的对象,现在正在创建子类的对象,因为子类重写的assign(),那么执行时子类重写的assign().

  • 相关阅读:
    【书籍学习】MATLAB书籍【chinapub】matlab教程一套电子书
    【视频学习1】《SimuIink仿真及代码自动生成技术从入门到精通》
    《[MATAB神经网络30个案例分析].史峰.扫描版[www.minxue.net]》
    Resources about Programming
    【待完成】《 Matlab_Simulink动力学系统建模仿真》实践内容
    Cracking the Coding Interview Q2.3
    Cracking the Coding Interview Q2.2
    Cracking the Coding Interview Q2.1
    Cracking the Coding Interview Q1.8
    Cracking the Coding Interview Q1.7
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13495168.html
Copyright © 2011-2022 走看看