且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

先鸡后蛋-继承类实例化分析 | 带你学《Java面向对象编程》之三十七

更新时间:2021-07-08 08:14:58

上一篇:青出于蓝-了不起的继承类 | 带你学《Java面向对象编程》之三十六
【本节目标】
通过阅读本节内容,你将了解到继承类实例化的秘密,并能够通过一定的逻辑在父子类中实现简单的开发。

子类对象实例化流程

现在已经成功实现了继承关系,并且也已经发现了继承主要特点,但是一旦程序之中提供有继承逻辑,那么对与子类对象的实例化定义是有要求的。从正常的社会逻辑来讲:没有父亲一定没有孩子。对于继承程序的逻辑也是一样的,在进行子类对象实例化的时候一定要首先实例化好父类对象。
范例:观察一个程序

class Person {
   public Person() {
       System.out.println(“【Person父类】一个新的Person父类实例化对象产生了。”) ;
   }
}
class Student extends Person {           //student是子类
   public student() {}   //构造方法
       System.out.println(“【Student子类】一个新的Student实例化对象产生了。”) ;
}
public class JavaDemo{
   public static void main(String args[]) {
       new Student() ;     //实例化子类对象       
   }         
}

程序执行结果:
【Person父类】一个新的Person父类实例化对象产生了。
【Student子类】一个新的Student实例化对象产生了。
现在即使没有进行父类对象实例化,也会由系统自动调用父类的构造方法(实例化父类对象),默认情况下的子类对象实例化流程会自动实例化父类对象。实际上就相当于子类的构造方法里面隐含了一个“super()”的形式。
范例:修改子类定义

class Student extends Person {           //student是子类
   public student() {}   //构造方法
       super() ;     //写与不写此语句效果一样
       System.out.println(“【Student子类】一个新的Student实例化对象产生了。”) ;
}

super()表示的就是子类调用父类构造的语句,该语句只允许放在子类构造方法的首行。在默认情况下的实例化处理,子类只会调用父类中的无参构造方法,所以写与不写“super()”区别不大,但是如果父类中没有提供无参构造,这时就必须利用super()明确调用有参构造。

class Person {
   private String name ;
   private int age ;
   public Person(String name ,int age) {
       this.name = name ;
       this.age = age ;
   }
}
class Student extends Person {           //student是子类
   private String school ;
   public student(String name , int age ,String school) {    //构造方法
       super(name ,age) ;    //明确调用父类构造
       this.school = school ;
   }   
}
public class JavaDemo{
   public static void main(String args[]) {
       new Student(“林小强”, 48 ,”北京大学”) ;     //实例化子类对象
   }         
}

结论:无论怎样,在实例化子类对象的同时一定会实例化父类对象,目的是对了所有的属性可以进行空间分配。
super与this都可以调用构造方法,super是由子类调用父类的构造,而this是调用本类构造,并且都一定要放在构造方法的首行,所以两个语句不允许同时出现。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:方圆之内-继承相关限制 | 带你学《Java面向对象编程》之三十八
更多Java面向对象编程文章查看此处