`
yushu1987
  • 浏览: 16529 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

构造器的继承

 
阅读更多
   在java中,经常使用到继承,子类从父类中继承可继承的域和方法。而关于构造器的构造器却和一般的继承有很大不同。以下面为例。
package Thinking;
public class Father{
	public int n;
	
	public Father(int n){	
		this.n=n;
	}
	
	public Father(String msg){
		System.out.println(msg);
	}

}
class Son extends Father{
	public Son(String msg){   //编译无法通过
		System.out.println(msg);
	}
}

    上述代码中,Son是Father的子类,父类有两个构造函数,一个参数为int,一个参数为String,而Son的构造函数和父类第二个构造函数一样。然而Son却无法通过编译,这是因为子类的构造器重隐含着对父类无参构造器的调用,若父类没有无参构造器,那子类必须在构造器中显式调用父类的其中一个有参构造器,否则无法通过编译。
    所以上述代码中,可以有两种解决办法。一是在父类添加一个无参构造器,二是在子类中添加一个对父类构造器的显示调用(super(param))。这样才可通过编译。
    方法一:
package Thinking;
public class Father{
	public int n;
	
	public Father(){
		System.out.println("Father");
	}
	public Father(int n){	
		this.n=n;
	}
	
	public Father(String msg){
		System.out.println(msg);
	}

}
class Son extends Father{
	public Son(String msg){
		System.out.println(msg);
	}
}  

方法二:
package Thinking;
public class Father{
	public int n;
	
	
	public Father(int n){	
		this.n=n;
	}
	
	public Father(String msg){
		System.out.println(msg);
	}

}
class Son extends Father{
	public Son(String msg){
		super(msg);
		System.out.println(msg);
	}
}

    此外当父类没有无参构造器时,子类无法使用系统默认的构造器,必须创建自己的构造器,无论是否有参数。
分享到:
评论

相关推荐

    java 构造器的调用

    在Java编程语言中,构造器...了解和掌握构造器的调用、初始化、默认构造器、继承中的构造器调用以及构造器重载等概念,是编写高质量Java代码的基础。通过熟练运用这些知识,可以更有效地管理对象的生命周期和状态。

    理解构造器--构造器和方法的区别

    【理解构造器与方法的区别】 在Java编程语言中,构造器和方法是两个核心概念,它们在类的定义和对象的创建中起着至关重要的作用。然而,它们之间存在着显著的差异,这些差异是理解面向对象编程的关键。 首先,构造...

    Java入门理解构造器

    ### Java入门理解构造器 #### 一、构造器的基本概念 在Java中,构造器(Constructor)是一种特殊的方法,主要用于初始化对象。构造器的名字必须与类名相同,并且没有返回类型,甚至连`void`也不可以有。构造器的...

    【JavaScript的9种继承实现方式归纳】js实现继承的几种方式.pdf

    3. 临时构造器继承 为了解决原型继承的缺点,可以借用一个临时构造器起到一个中间层的作用,所有子对象原型的操作都是在临时构造器的实例上完成,不会影响到父对象原型。例如: ``` var F = function() {}; F....

    Java中的继承基础讲解

    3. **构造器继承**:子类没有直接继承父类的构造器,但在子类构造器中可以通过`super()`调用来调用父类的构造器。 `final`关键字在继承中的作用: 1. `final`类不能被继承,确保其完整性不被破坏。 2. `final`方法...

    JAVA经典继承与父类调用 geter、seter访问器 构造器

    在这个特定的场景中,我们关注的是继承和访问器方法(getter和setter)的使用,以及构造器的应用。以下是对这些概念的详细解释: 1. **继承**:在Java中,一个类可以继承另一个类的属性和方法,这被称为继承。这种...

    因为一个Crash引发对Swift构造器的思考分析

    此外,我们还定义了一个 Swift 的 AViewController 类,并且继承自 BaseViewController,并且自定义了构造器 init(count: Int, parameterA: Int)。这个构造器调用了父类的 initWithParamenterA 构造器。 在 Crash ...

    Java继承构造器使用过程解析

    Java继承构造器使用过程解析的主要内容是介绍了Java继承构造器的使用过程,包括默认构造器和带参数的构造器,以及在子类构造器中调用基类构造器来执行初始化的重要性。这些知识点对于学习Java编程语言的开发者非常...

    构造器的解释.

    当一个类继承自另一个类时,子类可以通过`super`关键字来调用父类的构造器。如果不显式地调用父类构造器,则默认会调用父类无参的构造器。如果父类没有无参构造器,则必须显式地调用父类的有参构造器。 考虑以下...

    java基础知识卷

    19. **构造器继承**:构造器不支持继承,但可以通过构造器链调用超类构造器。 20. **程序入口**:Java应用程序从`main()`方法开始运行。 21. **数组大小**:Java数组的大小在创建时固定,无法动态调整。 22. **...

    C#程序设计-3期(KC008) KC008110100021-C# 构造器和C++ 构造器是否相同?.docx

    C#提供的是继承链上的构造器调用,即子类构造器会自动调用父类的无参构造器,除非明确地通过`base(args)`调用其他父类构造器。 C++的析构器(Destructor)与C#的析构器(Finalizer)也是两个不同概念。C++的析构器...

    从零开始学JAVA第10章_构造器.ppt

    重载的构造器没有返回值,且不能被继承。 10.3.3章节探讨了在父子类之间的构造器调用流程。在创建子类对象时,会先调用父类的构造器,然后才是子类的构造器。这是因为在子类构造器中,`super()`语句会被自动插入到...

    JavaScript对象模型-执行模型

    具体来说,`Number`, `Date`, `Array`, `RegExp`等内置构造器都是从`Object`构造器继承而来,但具体的实现细节可能会有所不同。例如,可以通过以下方式访问内置的构造器: ```javascript // 访问内置的Number构造器...

    java期末复习资料,超实用

    - 构造器继承:子类可以通过super调用父类的构造器。 7. **包与导入** - 包:组织类的一种方式,通过import导入需要的包中的类。 8. **异常处理** - 异常分类:检查异常(编译时必须处理)和非检查异常(运行时...

    程序员应聘笔试题(Java)

    1. 构造器继承与调用: 在Java中,当一个类B继承自类A时,B类必须有一个构造器。如果B类没有显式定义构造器,编译器会自动为它提供一个默认的无参构造器。这个构造器会隐式地调用父类的无参构造器,即`super()`。...

    java 静态块实例块构造器调用

    在Java继承体系中,子类会继承父类的非私有成员,包括静态块、实例块和构造器。调用顺序如下: 1. **静态块的执行顺序**:首先,从父类到子类,按照定义的顺序依次执行静态块。这意味着父类的静态块先于子类的静态...

    《C++20设计模式》学习笔记-第2章构造器模式学习代码

    通过这些文件,我们可以看到一个全面的学习路径:从理解构造器模式的基本原理,到掌握C++11中的继承构造器和参数化构造函数的使用,再到实际编写和编译代码进行测试。这样的学习过程有助于开发者在C++20环境中熟练...

    Java开发技术大全(500个源代码).

    inheritConstruct_3.java 构造器继承示例3 inheritConstruct_4.java 构造器继承示例4 inheritConstruct_5.java 构造器继承示例5 inheritConstruct_6.java 构造器继承示例6 inheritor.java 子类覆盖父类示例 ...

    es5生成class支持构造传参继承函数复用多继承

    在ES5中,我们可以定义一个函数来充当类的构造器: ```javascript function Person(name) { this.name = name; } ``` 在这个例子中,`Person`函数就是我们的构造函数,`this`关键字指向新创建的对象,`name`参数...

Global site tag (gtag.js) - Google Analytics