Java:继承关系中的构造函数(转)

1.构造函数不会被继承到子类。

2.子类的构造函数中的第一行(除注释外)必须是父类对象(super)的构造函数。

如果没有显示指定,则有两种情况:

1)如果父类有默认构造器(不带参数的构造器才是默认构造器),则会隐式地调用它(super()),此时不会出错;

2)如果父类没有默认构造器,则会出错。

class Game {

Game() {

System.out.println("Game default constructor");

}

Game(int i) {

System.out.println("Game constructor");

}

}

class BoardGame extends Game {

BoardGame(int i) {

// super(i);  // No error even without this statement

System.out.println("BoardGame constructor");

}

}

public class Chess extends BoardGame {

Chess() {

super(123);  // Missing this line will raise an error

System.out.println("Chess constructor");

}

public static void main(String[] args) {

new Chess();

}

}

Java:继承关系中的构造函数(转)

时间: 2025-01-02 14:29:10

Java:继承关系中的构造函数(转)的相关文章

C++和Java继承关系中方法覆盖的不同

下面是一段java代码: package chapter5.game; class Subject{ int num; public void print(){ System.out.println("Subject"); } } class ChildClass extends Subject { public void print(int i){ System.out.println("ChildClass"); } } public class SimpleD

JAVA继承关系中构造方法的调用次序详解

/*定义父类Base1*/ public class Base1 { int a;// 定义一个变量 /* 父类构造方法 */ public Base1(int a) { this.a = a; System.out.println("调用了父类的有参构造方法!"); } public Base1() { a = 1; System.out.println("调用了父类的无参构造方法!!"); ; } public static void main(String[]

【深入理解JVM】:Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其中静态代码块中如果静态成员变量sam不为空,则改变sam的引用.main()方法中创建了2个主

Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其中静态代码块中如果静态成员变量sam不为空,则改变sam的引用.main()方法中创建了2个主

继承关系中的第三种方式:利用<union-subclass>(补充)

继承关系中的第三种方式:利用<union-subclass>   代码:   映射文件(其他的代码和其他继承关系相同)   Person.hbm.xml   <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/

关于Java继承体系中this的表示关系

Java的继承体系中,因为有重写的概念,所以说this在子父类之间的调用到底是谁的方法,或者成员属性,的问题是一个值得思考的问题; 先说结论:如果在测试类中调用的是子父类同名的成员属性,这个this.成员  属性的值就是父类中这个成员属性的值,因为在Java中没有重写成员属性这一概念 ,如果调用的是同名的成员方法的话,那就应该调用的是重写后的成员方法.....如果子类中没有这个成员方法,则向父类中寻找. 上代码支持论证: package Test_This; public class Demo

1.7Oob 继承关系中构造方法的使用

1:父类中最好要有一个空参数的构造方法,因为默认的构造方法在自定义了构造方法后就不存在了,需要显示的写出来. 若父类中没有空参数的构造方法,则子类必须有自定义的构造方法,且用super()调用父类的构造方法 2:构造方法时不能继承的,java语言的类在继承时,子类的构造方法会默认调用父类的构造方法,所以父类的构造方法要显示的写出类. 3:子类调用父类方法直接调用. 原文地址:https://www.cnblogs.com/wan19890618123/p/10582676.html

Java继承类中static成员函数的重写

在java中,static成员函数是否可以被重写呢? 结论是,你可以在子类中重写一个static函数,但是这个函数并不能像正常的非static函数那样运行. 也就是说,虽然你可以定义一个重写函数,但是该函数没有多态特性.让我们测试一下: 1 class testClass1{ 2 static void SMothod(){ 3 System.out.println("static in testClass1"); 4 } 5 } 6 class testClass2 extends

JAVA继承中的构造函数

ps:因为顺口...我喜欢把方法称为函数 1) 一个单独的类,如果没有声明任何构造函数,那么系统会自动生成一个无参的构造函数,此时,new classA() 不会报错. ! 如果显式声明了一个有参构造函数,再使用 new classA(无参) 将会报错,因为在已有情况下系统不会帮助生成无参构造,建议自己添加一个无参构造函数 ---一个类的构造函数只会有三种状况:无参    /   无参+有参    /   有参 2) 如果存在继承关系,假设classB extends classA , 子类的所