使用Java的子类调用构造方法super()和this()
来源:互联网 发布:数据库模式怎么理解 编辑:程序博客网 时间:2024/05/01 01:22
测试代码:
package Test;abstract class FatherClass{abstract void getn();FatherClass(){System.out.println("无参父类构造方法");getn();}FatherClass(int i){System.out.println("有参父类构造方法");getn();}}class SonClass extends FatherClass{boolean n=true;SonClass(int x){//super(); //与下面的this()发生冲突this();System.out.println("有参子类构造方法");getn();}SonClass(){super(6);System.out.println("无参子类构造方法");getn();}void getn(){System.out.println(n);}}public class TestOfConstruction2 {public static void main(String[] args){new SonClass(6);}}
输出结果:
有参父类构造方法false //这里变量n还未初始化无参子类构造方法true有参子类构造方法true
1.构造方法作用:在系统生成对象时,系统会为对象分配内存空间,并自动调用构造方法对实例变量进行初始化,当对象不再使用时,系统会调用垃圾回收程序将其占用的内存回收。
默认构造方法是没有参数的构造方法,可分为两种:隐含的默认构造方法和程序显式定义的默认构造方法。
在Java语言中,每个类都至少需有一个构造方法。因此,如果用户定义的类中没有提供任何构造方法,那么Java语言将自动提供一个隐含的默认构造方法。该构造方法没有参数,用public 修饰,而且方法体为空,格式如下:public ClassName(){ } //隐含的默认构造方法在程序中也可以显式的定义默认构造方法,它可以是任意的访问级别。例如:
protected Employee() { //程序显式定义的默认构造方法 this("Hello~"); }如果类中显式定义了一个或多个构造方法,并且所有的构造方法都带参数,那么这个类就失去了默认构造方法。//所以上面代码中,SonClass(int x)中自带的隐含super()和this()里的super(int i)没有同时被调用,只有super(int i)有效
2.如果一个子类继承自一个父类,则其构造方法的调用次序为:父类构造方法;成员变量初始化;子类构造方法。
父类的构造方法一定会在子类的构造方法中被调用,并且逐渐向上链接,直到使得每个父类使用的构造方法都能被调用到。
3.子类不能继承父类的构造方法,当子类需要在构造方法中调用父类的构造方法时(只有构造方法才能调用一个类的构造方法)不能直接通过父类的方法名来调用其构造方法,必须使用super(), 而且super()必须是构造方法的第一条语句(事实上系统默认在子类的构造方法里添加了一个隐含的super())。同理,this()也必须要作为构造方法里的第一条语句,这导致在同一个构造方法里super()和this()不共存。
0 0
- 使用Java的子类调用构造方法super()和this()
- Java中子类继承构造方法 和 super this用法的一个总结
- [Java] super,this 的区别及构造方法的使用
- java继承中的构造方法及this,super的使用
- java中this()和super()在子类构造函数中不能共存的原因
- Java - 构造函数、this 和 super的使用
- Java中的构造方法总结和this及super的使用
- 一个子类要调用父类的方法时,默认是使用this还是super?
- 关于子类构造方法调用super();
- [java]构造方法super() this()
- JAVA中super和this调用构造函数
- 构造方法的调用并涉及this、super用法
- 构造函数的this和super的调用
- 子父类构造函数的调用演示,区分this()和super()
- super 和 this 调用构造器的区别
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
- java中this和super的使用
- 使用this调用重载的构造方法
- git cherry-pick. 如何把已经提交的commit, 从一个分支放到另一个分支
- 整合iOS和OS X将用户留在苹果的世界里
- 百度联盟峰会后想到的一些
- git rebase/reset小计
- 黑马程序员_Java基础——加强篇(下)
- 使用Java的子类调用构造方法super()和this()
- 数据库之关系代数
- [LeetCode112]Triangle
- Codeforces Testing Round #10 A. Forgotten Episode
- ffmpeg(10) parsing section
- (Struts2学习篇) Struts2文件处理之文件上传
- Git GPG error signing tags
- codeforces round #250 div1
- picketView-点餐-文字