java 构造函数的解析
来源:互联网 发布:网络口碑营销的案例 编辑:程序博客网 时间:2024/05/22 06:08
java构造方法其实也是一种特殊的方法:
1.构造方法名必须和类名相同
2.构造方法没有返回值,不能定义为void类型
3.一个对象可以有多个构造方法,也可以没有构造方法,假如没有则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
4.构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
对于这些都是没有问题的,关键是加入继承关系后的构造函数的调用问题。
1.子类只继承父类的默认构造方法,即无形的构造方法,如果没有则不继承。
2.子类从父类继承的默认构造方法不能成为子类的默认构造方法。
3.如果子类想调用父类的非默认构造函数,则必须使用super来实现。
4.创建子类对象时,子类必须调用父类的构造函数。可以通过系统自动调用父类的默认构造函数,如果父类没有默认构造函数时,子类构造函数必须通过super调用父类的构造函数。
其实最关键的也是容易产生困惑的,就是调用的第4条。当我请求创建子类对象时,先会调用父类的构造方法,如果父类有默认的构造方法,则会调用父类的默认构造方法。
如果没有,则必须通过super调用父类的构造函数。
public class Person {
public Person(){
System.out.println("Person initialized");
}
public Person(String str){
System.out.println("Person initialized"+str);
}
}
public class Chinese extends Person {
public Chinese() {
System.out.println("Chinese initalized");
}
public Chinese(String str) {
System.out.println("Chinese initialized " + str);
}
}
当我们 Chinese ch= new Chinese("wo");的时候:
Person initialized
Chinese initialized wo
我们先调用父类的Person()方法,在调用子类的public Chinese(String str)。
假设我们修改Person类,
public class Person {
public Person(String str){
System.out.println("Person initialized"+str);
}
}
那么编译器就好报chinese类的编译错误,也就是你必须调用的父类的构造方法,没有默认方法时必须通过super调用父类的构造函数。
Chinese类就得相应的修改为:
public class Chinese extends Person {
public Chinese() {
super(null);
System.out.println("Chinese initalized ");
}
public Chinese(String str) {
super(str);
System.out.println("Chinese initialized " + str);
}
}
结果:
Person initialized wo
Chinese initialized wo
假设我们修改Person类,
public class Person {
}
那么不对Chinese进行修改,也不会报错,这个时候没有显示的构造方法,就会启用默认的构造方法了。
另外,我觉得调用了父类的构造方法,但是并没有生成父类的对象,因为如果父类是抽象类的话,是不会支持实例化的。
1.构造方法名必须和类名相同
2.构造方法没有返回值,不能定义为void类型
3.一个对象可以有多个构造方法,也可以没有构造方法,假如没有则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
4.构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
对于这些都是没有问题的,关键是加入继承关系后的构造函数的调用问题。
1.子类只继承父类的默认构造方法,即无形的构造方法,如果没有则不继承。
2.子类从父类继承的默认构造方法不能成为子类的默认构造方法。
3.如果子类想调用父类的非默认构造函数,则必须使用super来实现。
4.创建子类对象时,子类必须调用父类的构造函数。可以通过系统自动调用父类的默认构造函数,如果父类没有默认构造函数时,子类构造函数必须通过super调用父类的构造函数。
其实最关键的也是容易产生困惑的,就是调用的第4条。当我请求创建子类对象时,先会调用父类的构造方法,如果父类有默认的构造方法,则会调用父类的默认构造方法。
如果没有,则必须通过super调用父类的构造函数。
public class Person {
public Person(){
System.out.println("Person initialized");
}
public Person(String str){
System.out.println("Person initialized"+str);
}
}
public class Chinese extends Person {
public Chinese() {
System.out.println("Chinese initalized");
}
public Chinese(String str) {
System.out.println("Chinese initialized " + str);
}
}
当我们 Chinese ch= new Chinese("wo");的时候:
Person initialized
Chinese initialized wo
我们先调用父类的Person()方法,在调用子类的public Chinese(String str)。
假设我们修改Person类,
public class Person {
public Person(String str){
System.out.println("Person initialized"+str);
}
}
那么编译器就好报chinese类的编译错误,也就是你必须调用的父类的构造方法,没有默认方法时必须通过super调用父类的构造函数。
Chinese类就得相应的修改为:
public class Chinese extends Person {
public Chinese() {
super(null);
System.out.println("Chinese initalized ");
}
public Chinese(String str) {
super(str);
System.out.println("Chinese initialized " + str);
}
}
结果:
Person initialized wo
Chinese initialized wo
假设我们修改Person类,
public class Person {
}
那么不对Chinese进行修改,也不会报错,这个时候没有显示的构造方法,就会启用默认的构造方法了。
另外,我觉得调用了父类的构造方法,但是并没有生成父类的对象,因为如果父类是抽象类的话,是不会支持实例化的。
1 0
- java 构造函数的解析
- java 构造函数的解析
- 【构造函数】解析构造函数的作用
- JAVA构造函数运行解析
- JAVA构造函数运行解析
- JAVA构造函数运行解析
- 构造函数的简单解析
- php的构造函数解析
- java的构造函数
- JAVA的构造函数
- Java的构造函数
- java的构造函数
- java的构造函数
- 重载与构造函数的解析
- C++中string构造函数的解析
- Java 构造函数的执行
- Java构造函数的继承
- Java构造函数的执行情况
- 怎么读取webconfig和配置自定义节点?
- 使用ServletFileUpload 实现文件上传 和获取文件信息
- 求子数组的最大和问题
- webRTC音频处理流程
- 2013年8月,北京警方通报,警方打掉一个在互联网蓄意制造传播谣言、恶意侵害他人名誉、非法攫取经济利益的网络推手公司——北京尔玛互动营销策划有限公司,抓获秦志晖(网名“秦火火”)、杨秀宇(网名“立
- java 构造函数的解析
- redhat 5.8 samba配置安装测试
- 二叉树遍历--非递归实现
- sshd服务基本配置和使用(201301改)
- SharePoint At Work----SharePoint Data View Web Part
- 中共反腐力度越来越大、速度越来越快
- OpenCV for Android入门
- 有人爆料奶茶妹妹的丑事看看是真的吗
- 360随身WiFi能免费上网吗?