子父类构造函数的特点
来源:互联网 发布:js判断chrome版本 编辑:程序博客网 时间:2024/05/18 01:46
子父类中成员函数的特点。
当子父类都有构造函数时,发现结果为:
fu constructor run
zi constructor run
先执行了父类的构造函数,再执行子类的构造函数。
为什么?
因为子类的所有的构造函数中的第一行都有一句隐式语句super();//默认调用的是父类中的空参数的构造函数。
class Fu { Fu() { System.out.println("fu constructor run"); }}class Zi extends Fu{ Zi() { //super(); System.out.println("zi constructor run"); }}
子类中的构造函数为什么有一句隐式的super()呢?
原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中执行父类的初始化动作。才可以更方便地使用父类中的内容。
当父类中没有空参数构造函数时,子类的构造函数必须通过显示的super语句指定要访问的父类中的构造函数。
这就是子类实例化的过程.
class Fu { Fu() { System.out.println("fu constructor run..a.."); } Fu(int x) { //显示初始化 System.out.println("fu constructor run..b.."+x); }}class Zi extends Fu{ Zi() { //super(); System.out.println("zi constructor run..c.."); } Zi(int x) { //super(); System.out.println("zi constructor run..d.."+x); }}class ExtendsDemo3{ public static void main(String[] args) { new Zi(); new Zi(6); }}
打印的结果是:a c a d .
细节:
1,如果子类的构造函数第一行写了this调用了本类其他构造函数语句,那么super调用父类的语句还有吗?
没有的,因为this()或者super()只能定义在构造函数的第一行,因为初始化动作要先执行。
2,父类构造函数中是否有隐式的super呢?
有的,记住:只要是构造函数默认第一行都是super();
父类的父亲是谁呢?super调用的到底是谁的构造函数呢?
java体系在设计,定义了一个所有对象的父类Object。
总结:
类中的构造函数默认第一行都有隐式的super()语句,在访问父类中的构造函数。
所以父类的构造函数既可以给自己的对象初始化,也可以给自己的子类对象初始化。
问题:
1,this语句和super语句是否可以在同一个构造函数中出现呢?
不行,因为必须定义在第一行。
2,为什么要定义在第一行呢?
因为初始化的动作要先执行。
子类的实例化过程的应用,也是super调用的应用。
什么时候用super调用父类中构造函数,只要使用父类的指定初始化动作,就在子类中通过super(参数列表)格式进行调用。
class Person{ private String name; private int age; public Person(String name,int age) { this.name=name; this,age=age; } public void setName(String name) { this name=name; } public int getName() { return name; } public void setAge(int age) { this.age=age; } public int getAge() { return age; }}class Student extends Person{ public Student(String name,int age) { super(name,age); } public void study() {}}class Worker extends Person{ public Worker(String name,int age) { //调用父类,使用父类的初始化动作 super(name,age); } public void work() {}}
- 子父类构造函数的特点
- 子父类中的构造函数的特点
- 子父类中的构造函数的特点
- 子父类中构造函数的特点
- 子父类中构造函数的特点
- 字父类中构造函数的特点
- 子父类中构造函数的特点
- java继承中构造函数的特点
- 构造函数的作用和特点
- 构造函数的特点区别与重载
- 子父类中的变量,函数,构造函数的特点以及子类的实例化过程
- 子类父类中类成员(变量、函数、构造函数)的特点
- 子类父类中类成员(变量、函数、构造函数)的特点
- 继承、聚集;子父类中变量、函数、构造函数的特点
- 面向对象-简单的(子父类构造函数的特点)-子类实例化过程
- Java学习:构造函数特点
- 构造方法的特点
- 构造方法的特点
- 【Openfire】网页版单对单聊天实例
- 禁止浏览器缓存input值
- HDOJ 1509 Windows Message Queue
- 友盟版本号升级
- 智能指针发展
- 子父类构造函数的特点
- _.contains is not a function
- Python学习记录-----批量发送post请求
- 18.判断出栈顺序是否正确?
- 网易2017实习生编程题—消除重复元素
- 组合模式
- LeetCode专栏L013_Roman_to_Integer
- NIO简介
- codeforces 560E Gerald and Giant Chess (dp + 组合数)