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

简介: 本节结合实例讲解了继承类实例化的详细过程,并通过另一则案例验证了实例化继承类的同时必先实例化父类的说法。

上一篇:青出于蓝-了不起的继承类 | 带你学《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面向对象编程文章查看此处

相关文章
|
11天前
|
Java
怎么用Java 代码示例来展示继承的实现
本文通过Java代码示例展示继承机制:Animal为父类,Cat和Dog继承其属性与方法,并实现构造函数调用、方法重写与特有功能扩展,体现代码复用与多态特性。
50 4
|
2月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
62 4
|
16天前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
167 101
|
16天前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
193 100
|
2月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
300 120
|
20天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
2月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
2月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
2月前
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。