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

原创 2016年08月28日 16:06:07
    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();结果又如何?

相关文章推荐

Lesson_for_java_day09--继承、实例化、构造方法、覆盖、重载、this关键字、super关键字、全局变量和局部变量

/* -------------------------------继承初步------------------------------------------------ 什么是继承: 在面向...

Lesson_for_java_day09--练习--继承、this、super的使用、使用构造方法赋初始值

package sonyi; /* * *练习: * 目的:练习this,super的使用,构造方法覆初始值,继承初步 * 步骤: * 1、新建一个Company类 * 属性:姓...

java构造方法,以及super、this关键字、隐式调用、显式调用

首先需要明白的是,当创建java对象时,程序总是依次调用每个父类的非静态初始化块、父类构造器(总是从Object开始)执行初始化,最后才调用该类的非静态初始化块、构造器执行初始化。 如果你不明白初始化...

[Java] super,this 的区别及构造方法的使用

1、构造方法的使用类有一个特殊的成员方法叫做构造方法,它的作用是创建对象并初始化成员变量。在创建对象时,会自动调用类的构造方法。 JAVA中构造方法必须与该类具有相同的名字,并且没有方法的返回类型(...

使用Java的子类调用构造方法super()和this()

package Test; abstract class FatherClass{ FatherClass(){ System.out.println("无参父类构造方法"); } ...

java中this用法 super()用法 以及构造方法

this 1、当全局变量跟局部变量重名时,表示使用全局变量(此时this指代本类对象) 例如  类 class A{     String name;     void setName(St...
  • AsiaLYF
  • AsiaLYF
  • 2015年10月18日 13:00
  • 765

黑马程序员_五 【初识面向对象】【类、构造方法、对象】【封装、继承、多态】【this、super】

--------------------- android培训、java培训、java学习型技术博客、期待与您交流! -------------------  1  面向对象初识  面向对象的概...

Android自定义View(一)关于super、this和构造方法

其实我发现个问题,我写的博客都是我边学变写的,当回过头来再看之前的博客,感觉总是:这特么写的什么玩意了!所以,感谢你能看我的博客,虽然有点糟糕。         进入主题,先说this关键字...

Objective-C 【构造方法(重写、场景、自定义)、super】

——————————————————————————————————————————— super关键字的使用 #import @interface Animal : NSObject...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 继承中的构造方法之隐身者“super”
举报原因:
原因补充:

(最多只允许输入30个字)