zoukankan      html  css  js  c++  java
  • java 子类和父类构造函数关系

    在创建子类的对象时,jvm会首先执行父类的构造方法,然后再执行子类的构造方法,如果是多级继承,会先执行最顶级父类的构造方法,然后依次执行各级个子类的构造方法

    package com.my.test;
    public class Son extends  Father{
    	SonProp r=new SonProp();
    	public Son()
    	{
    		System.out.println(" Son is construct");		
    	}
    	public static void main(String[] args)
    	{		
    		new Son();
    	}	
    }
    class SonProp
    {
    	public SonProp()
    	{
    		System.out.println(" SonProp is construct");		
    	}
    }
    class FatherProp
    {
    	public FatherProp()
    	{
    		System.out.println(" FatherProp is construct");		
    	}
    	
    }
    class Father
    {
    	FatherProp sonProp=new FatherProp();
    	public Father()
    	{
    		System.out.println(" Father is construct");		
    	}	
    }
    
    执行结果为:
    
     FatherProp is construct
     Father is construct
     SonProp is construct
     Son is construct


    java继承中对构造函数是不继承的。
    
    以下是例子:
    
     public class FatherClass {
     public FatherClass() {
           System.out.println(100);
     }
    
     public FatherClass(int age) {
          System.out.println(age);
     }
    
    }
    
     
    
    public class SonClass extends FatherClass{
    
            public SonClass() {
             }
            public SonClass(int c) {
                     System.out.println(1234);
            }
       
     public static void main(String[] args) {
    
      FatherClass f = new FatherClass(28);
      SonClass s = new SonClass(66);
     
     }
    }
    
    编译后执行结果如下是什么呢?
    
    分析:1. FatherClass f = new FatherClass(28);这句没有必要解释
    
    2.SonClass s = new SonClass(66);执行这句时,调用
    
     public SonClass(int c) {
                     System.out.println(1234);
            }
    
    
    在这个构造函数中,等价于
    
     public SonClass(int c) {
    
                    super();//必须是第1行,否则不能编译
                     System.out.println(1234);
            }
    
    所以结果是    100
                             1234
    
    3.如果子类构造函数是这样写的
    
    public SonClass(int c) {
    
                    super(22);//必须是第1行,否则不能编译
    
                   //显示调用了super后,系统就不再调用super();
                     System.out.println(1234);
            }
    
    执行结果是   22
                             1234
    
    总结1:构造函数不能继承,只是调用而已。
    
    如果父类没有无参构造函数
    
    创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显示调用父类有参构造函数
    
    如下:
    
    SonClass (){
    
    super(777);//显示调用父类有参构造函数
    
    System.out.println(66);
    
    }
    
    如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super();
    
    但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。
    
    总结2:创建有参构造函数后,系统就不再有默认无参构造函数。
    
    如果没有任何构造函数,系统会默认有一个无参构造函数。

  • 相关阅读:
    Algorithm Gossip (48) 上三角、下三角、对称矩阵
    .Algorithm Gossip (47) 多维矩阵转一维矩阵
    Algorithm Gossip (46) 稀疏矩阵存储
    Algorithm Gossip (45) 费氏搜寻法
    Algorithm Gossip (44) 插补搜寻法
    Algorithm Gossip (43) 二分搜寻法
    Algorithm Gossip (42) 循序搜寻法(使用卫兵)
    Algorithm Gossip (41) 基数排序法
    Algorithm Gossip (40) 合并排序法
    AlgorithmGossip (39) 快速排序法 ( 三 )
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317758.html
Copyright © 2011-2022 走看看