使用Java的子类调用构造方法super()和this()
2014-06-04 01:15
721 查看
测试代码:
输出结果:
1.构造方法作用:在系统生成对象时,系统会为对象分配内存空间,并自动调用构造方法对实例变量进行初始化,当对象不再使用时,系统会调用垃圾回收程序将其占用的内存回收。
默认构造方法是没有参数的构造方法,可分为两种:隐含的默认构造方法和程序显式定义的默认构造方法。
在Java语言中,每个类都至少需有一个构造方法。因此,如果用户定义的类中没有提供任何构造方法,那么Java语言将自动提供一个隐含的默认构造方法。该构造方法没有参数,用public 修饰,而且方法体为空,格式如下:
2.如果一个子类继承自一个父类,则其构造方法的调用次序为:父类构造方法;成员变量初始化;子类构造方法。
父类的构造方法一定会在子类的构造方法中被调用,并且逐渐向上链接,直到使得每个父类使用的构造方法都能被调用到。
3.子类不能继承父类的构造方法,当子类需要在构造方法中调用父类的构造方法时(只有构造方法才能调用一个类的构造方法)不能直接通过父类的方法名来调用其构造方法,必须使用super(), 而且super()必须是构造方法的第一条语句(事实上系统默认在子类的构造方法里添加了一个隐含的super())。同理,this()也必须要作为构造方法里的第一条语句,这导致在同一个构造方法里super()和this()不共存。
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()不共存。
相关文章推荐
- java子类对象在子类方法中使用父类属性 使用this和super都可以
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
- Java -- 子类使用super调用父类的方法A,A 调用了方法B,子类也override方法B,那么super.A()最终调用到了子类的B方法
- 一个子类要调用父类的方法时,默认是使用this还是super?
- Java关键字this、super使用总结
- java中的this和super使用
- Java关键字this、super使用总结
- python中子类调用父类方法几点细节(正确使用super)
- JAVA中要使用 super() 调用父类的构造函数时,为什么要是第一句调用?
- Java关键字this、super使用总结
- java super,this区别使用
- java中this、super的使用
- Java关键字this、super使用总结
- 关于this和super使用的JAVA面试试题
- 子类中方法与父类中形成重写关系,可以在构造方法中用super来调用父类中的该方法
- Java关键字this、super使用总结
- Java关键字this、super使用总结(转)
- Java关键字this、super使用总结
- java构造函数是否可继承,以及子类构造函数可否不使用super调用超类构造函数
- JAVA核心技术 第五章 继承 类、超类、子类 关键字this super 多态 动态绑定