关闭

Java 继承中的构造方法之隐身者“super”

标签: markdownjava编译器
247人阅读 评论(0) 收藏 举报
    java中继承是单根结构,即子类只能继承一个父类,这也符合大自然的规律。这里我们谈谈在子类继承父类时,构造方法的调用,我们知道继承是指子类继承父类的特性(属性和方法),同时具有自己的个性。其中父类的构造方法不能被子类继承,这是因为构造方法具有:1)构造方法的方法名与类名相同;2)无返回值。如果继承了父类的构造方法编译器会成为你符合构造方法语法特点,但又不与子类名相同,所以会出现错误。
    接下来我们聊聊子类在继承父类特性时,构造方法的调用特点。我们知道对于一个普通类来说,会有隐藏一个空方法的构造方法。当类new出一个具体对象时,如果没有赋予具体属性,将直接调用隐藏的构造方法完成“构造”。如果有具体参数,将调用有参构造方法。
    知道了一般类调用构造方法顺序,接下来聊聊继承中子类如何调用父类中的构造方法。在Java中对于具体的对象在创建后,将调用构造方法实现对对象的构造(属性的赋值等准备工作)。子类的对象在构造时,首先会调用父类中的相应构造方法(构造方法重载情况),这是因为有一条在第一行被隐藏的super语句实现了这一个功能。接下来我们通过一段代码来说明super语句是怎样完成精确“瞄准”父类中的相应构造方法。

`class Fu{
String name;
fu(){

    System.out.println("父类构造函数");
}
fu(String n){

    System.out.println("super父类构造函数");
}

}
class Zi extends Fu{

Zi(String n){
    super(n);
    System.out.println("有参子类构造函数");
}


Zi(){

    System.out.println("无参子类构造函数");
}

}
public class TestTwo{

public static void main(String args[]){

    //Zi a=new Zi();
    Zi a=new Zi("niii");

    }

} `
结果:super父类构造函数
有参子类构造函数
结果分析:可以看出在构造具体对象zi时,先调用构造函数zi(),然后在super强制调用下,直接调用父类构造函数fu(),由于zi对象没有初始化赋值,所以分别调用的有参的子类和父类构造方法。
问题:如果执行被注解的zi a=new zi();结果又如何?

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:423次
    • 积分:33
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档