先鸡后蛋-继承类实例化分析 | 带你学《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面向对象编程文章查看此处

相关文章
|
20天前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
|
26天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
44 8
|
27天前
|
Java 开发者
Java 面向对象编程
总之,Java 的面向对象编程为开发者提供了一种有效的编程范式,帮助他们构建出高质量、可维护的软件系统。理解和掌握面向对象的概念和原则是成为优秀 Java 开发者的重要基础。
46 3
|
26天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
75 1
|
26天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
59 1
|
1月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
63 17
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
114 4
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
58 2
|
1月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
26 0
下一篇
DataWorks