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();结果又如何?

Java构造方法之super用法

笔者之前一直很疑惑:为什么别人的源代码中的类要继承,居然一定要写super,而且必须写在第一行。不然就会报错。 刚刚开始还以为是别人的源代码中写了注解还是什么鬼的代码。查过诸多的资料之后发现。 请注意...
  • jcaksonsen
  • jcaksonsen
  • 2016年06月02日 11:06
  • 2008

java-继承super的使用

java-继承,super的使用
  • u012360598
  • u012360598
  • 2014年11月30日 00:19
  • 873

JAVA基础再回首(六)——父与子的继承、super关键字、方法重写、方法重载

JAVA基础再回首(六)——父与子的继承、super关键字、方法重写、方法重载 不墨迹,才是时间管理的最大利器,学无止境。 继承 首先我们来学习继承的概述多个类中存在相同属性和行为时,将这些内...
  • m366917
  • m366917
  • 2016年08月02日 22:10
  • 2102

java 构造方法中super()的作用

class Father { Father(){print ('father');}; } class Son { Son(){print ('son')}; } 如果只是这样,那么构造So...
  • qq_23195583
  • qq_23195583
  • 2015年03月20日 14:42
  • 9063

Super 关键字在子类构造方法和普通方法中的应用

1.构造方法中的应用:   在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来。     当你new一个子类对象的时候,必须首先要new一...
  • Soundair
  • Soundair
  • 2015年04月22日 15:27
  • 2392

构造方法中super()的作用

在类的继承中,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中的语句 如下面代码:class Extends_Demo { public static void...
  • u010698072
  • u010698072
  • 2016年07月10日 21:09
  • 5603

scala基础5 —— 类的继承

scala基础,类的继承
  • qq_35799003
  • qq_35799003
  • 2016年10月09日 11:55
  • 360

关于子类为何不能继承父类构造方法的几点解释

首先我们谈谈何为继承:他是面向对象的基本特征之一,是由已有类创建新类的机制。 他的原则就是子类继承父类的成员属性,包括实例成员变量和类成员变量。子类也可以继承除构造方法之外的所有成员方法,包括实例成员...
  • weixin_36615286
  • weixin_36615286
  • 2017年07月30日 11:14
  • 285

Java继承关系下的构造方法调用

在Java中创建一个类的对象时,如果该类存在父类,则先调用父类的构造方法,然后再调用子类的构造方法。本文描述子类中如何调用父类的构造方法。...
  • ccpat
  • ccpat
  • 2015年03月19日 16:24
  • 1895

为什么java的构造方法中this()或者super()要放在第一行

看Head First Java 256页 ,书中提到“this()只能用在构造函数中,且它必须是第一行语句!”,不明白原因,查资料发现知乎已经有相关问题,搬运过来做个记录。 https://www....
  • zhaozhirongfree1111
  • zhaozhirongfree1111
  • 2017年09月13日 09:52
  • 496
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 继承中的构造方法之隐身者“super”
举报原因:
原因补充:

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