java 子类和父类构造函数关系

来源:互联网 发布:批量提取word表格数据 编辑:程序博客网 时间:2024/05/29 18:53

在创建子类的对象时,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                         12343.如果子类构造函数是这样写的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:创建有参构造函数后,系统就不再有默认无参构造函数。如果没有任何构造函数,系统会默认有一个无参构造函数。

0 0
原创粉丝点击