java继承中对构造函数是不继承的,只是调用(隐式或显式)。
以下是例子:
public class FatherClass {
public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}
public class SonClass extends FatherClass{
public SonClass() {
}
public SonClass(int c) {
System.out.println(1234);
}
public static void main(String[] args) {
SonClass s = new SonClass(66);
}
}
编译后执行结果如下是什么呢?
分析:SonClass s = new SonClass(66);执行这句时,调用
public SonClass(int c) {
System.out.println(1234);//系统会自动先调用父类的无参构造函数(super())
}
在这个构造函数中,等价于
public SonClass(int c) {
super();//必须是第1行,否则不能编译
System.out.println(1234);
}
所以结果是 100
1234
在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。
3.如果子类构造函数是这样写的
public SonClass(int c) {
super(22);//必须是第1行,否则不能编译
//显式调用了super后,系统就不再调用无参的super()了;
System.out.println(1234);
}
执行结果是 22
1234
总结1:构造函数不能继承,只是调用而已。
如果父类没有无参构造函数
创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显式调用父类有参构造函数
如下:
SonClass (){
super(777);//显示调用父类有参构造函数
System.out.println(66);
}
如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super();
但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。
总结2:创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数。
原文地址:http://www.cnblogs.com/sunnychuh/archive/2011/09/09/2172131.html
分享到:
相关推荐
本文通过实例分析了Java序列化中子类、父类构造函数问题,展示了父类和子类之间的继承关系对序列化的影响。同时也展示了在反序列化时父类构造函数的调用顺序。这些知识点对于Java开发人员来说非常重要,可以帮助他们...
### Python中子类继承父类的`__init__`方法详解 #### 前言 在面向对象编程中,继承是一种强大的机制,它允许我们创建一个新的类(子类),该类继承了现有类(父类)的所有属性和方法。Python支持这种特性,并且...
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
- **this(参数)**:类似于Java,C#也允许在子类构造函数内部通过`this(param)`调用本类的其他构造函数。 - **base(参数)**:在子类构造函数中,使用`base(param)`调用父类的构造函数。 2. **调用父类函数**: - ...
在编程世界中,继承是面向对象编程的一个核心概念,它允许子类继承父类的特性并可以进行扩展或修改。本主题围绕“子类调用抽象父类”展开,我们将深入探讨抽象类、子类继承、抽象属性以及如何在子类中重写父类的方法...
1. **继承性**:在Java中,子类可以继承父类的属性和方法,但子类的成员总数不一定大于等于父类,因为子类可以覆盖父类的方法或添加自己的成员。 2. **注释**:Java中的注释并不影响程序的执行。单行注释以`//`开始...
5. Java继承和构造函数:Java中子类继承父类,并可以拥有自己的构造函数。例如,Point类的构造函数可以有不同的重载版本,如public Point(int x, int y)。 6. Java循环和控制流程:Java中的循环结构包括for、while...
- **知识点**: 选择题17考查Java中子类如何调用父类的构造函数。子类可以通过**B.super**关键字调用父类的构造函数。 #### 十八、Java核心类库 - **知识点**: 选择题18考查Java的核心类库。Java的核心类库包含在**D...
在 Java 中,子类的构造函数是通过继承父类的构造函数来实现的。子类的构造函数中,第一行代码是调用父类的构造函数,以便对父类的成员变量进行初始化。例如,在上面的代码中,Zi 类的构造函数中,首先调用了 Fu 类...
在继承中,我们可以使用this和super关键字来调用成员变量、成员方法和构造函数。this代表本类对象,super代表父类内存空间标志。 重写(Override)是继承中一个重要的概念,指的是子类覆盖父类方法。子父类中存在...
3. 有的类定义时可以不定义构造函数,所以构造函数不是必需的。() 解释:在Java中,如果一个类没有定义构造函数,那么编译器将自动提供一个默认的构造函数。 4. 由继承性可知,程序中子类拥有的成员数目一定大于...
- 第四个题目展示了面向对象编程的概念,包括类(Circle 和 Cylinder)、构造函数以及成员方法。Circle 类包含半径变量和获取面积、周长的方法。Cylinder 类继承Circle,添加了高度变量和计算体积的方法。`show()` ...
- 第4题提到了子类构造函数,Java中子类构造器默认会调用父类的无参构造器,`super()`用于调用父类构造器。 3. **数组操作**: - 第1题要求逆序输出数组,这需要理解数组索引的概念,并能实现反向遍历。 - 第3题...
Java中子类覆盖父类方法时,其方法签名必须完全一致。在这个例子中,`SubB2`的`foo()`方法没有声明可能抛出异常,而父类`A`的`foo()`方法声明了可能抛出`Exception`。这会导致编译错误。正确答案为**D**。 ### 四、...
Java中子类与超类的构造函数 - **构造函数调用**:子类构造函数必须显式调用超类构造函数。 - **super关键字**:使用super关键字调用超类构造函数。 - **构造顺序**:先执行超类构造函数,再执行子类构造函数。 #...
在本Java OOP实验中,我们探讨了三个主要问题,涉及类的设计、继承以及方法的实现。以下是每个问题的详细解答: **Q1. 扩展Point2D类** 初始的`Point2D`类已经定义了二维平面上的一个点,包含两个坐标`x`和`y`。...
- 实现`Runnable`接口的方式则需要定义`run`方法,并通过`Thread`类的构造函数传入该实现类的实例来创建线程。这种方式的优点是可以避免由于Java单继承限制带来的不便,并且可以通过同一个`Runnable`对象创建多个...
每个对象都有一个`__proto__`属性,它指向创建该对象的构造函数的原型。当试图访问对象的一个属性或方法时,如果该对象本身没有该属性,JavaScript会沿着原型链向上查找,直到找到该属性或方法为止。 为了实现子...