class Person
{
private String name="";
private int age=0;
public Person()
{
System.out.println("person无参数构造函数");
}
public Person(String name,int age)
{
this.name=name;
this.age=age;
System.out.println("person 2 参数的构造函数");
}
}
class Student extends Person
{
private String school;
private String grade;
public Student()
{
System.out.println("student 无参数的构造函数");
}
public Student(String name ,int age,String school)
{
System.out.println("student 3 参数的构造函数");
}
public Student(String name ,int age,String school,String grade)
{
super(name,age);
//此处调用了super(name,age),则不再调用默认的无参构造函数;
this.school=school;
this.grade=grade;
System.out.println("student 4 参数的构造函数,super()。");
}
}
class Test
{
public static void main(String [] args)
{
System.out.println("st1:");
Student st1=new Student();
System.out.println("---------------------------");
System.out.println("st2:");
Student st2=new Student("zhangsan",21,"北大");
System.out.println("---------------------------");
System.out.println("st3:");
Student st3=new Student("lisi",24,"北大","研究生");
}
}
输出如下:
st1:
person无参数构造函数
student 无参数的构造函数
---------------------------
st2:
person无参数构造函数
student 3 参数的构造函数
---------------------------
st3:
person 2 参数的构造函数
student 4 参数的构造函数,super().
说明了创建一个子类的对象实例的时候,必先调用父类的无参数的构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统将不会给它创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器将会报错,但如果在子类的构造函数中指定用父类的带参数的构造函数的时候,或者在父类中加一个无参数的构造函数,就不会报错。
=============================================
我们假设A是B的父类,B是A的子类。
1、如果程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,如果用户提供了自己的构造函数,则编译器就不在提供默认的无参数构造函数。
2、子类B实例化时会自动调用父类A的默认构造函数,所以如果A的默认的无参数的构造函数为private,则编译器会报错,而如果A没有提供默认的无参数的构造函数,而提供了其他类型的构造函数,编译器同样会报错,因为B找不到A的默认无参数构造函数。所以,我们最好给父类A提供一个无参数的构造函数。
3、或者在B的构造函数中显示的调用父类A的有参构造函数。super(parameter)
4、即使子类中的构造函数有参数,如果他没有显示调用父类中的构造函数,他仍然会默认调用父类中的默认构造函数
分享到:
相关推荐
在这个场景中,我们关注的是Java继承时构造函数的调用规则。 首先,每个Java类都有一个或多个构造函数,它们的主要作用是在创建对象时初始化对象的状态。如果一个类没有显式定义任何构造函数,Java编译器会自动生成...
### 构造函数继承在Java中的应用 构造函数继承是面向对象编程中一个重要的概念,尤其是在Java这样的语言中。本文将深入探讨构造函数继承的概念、原理及其在Java中的实现方式。 #### 构造函数的基本概念 在Java中...
在Java中,构造函数可以被重载以提供不同的初始化方式,但它们不能被继承。这意味着,当一个类继承自另一个类时,子类不会自动继承父类的构造函数。为了确保子类能够正确地初始化其父类部分,需要特别注意构造函数的...
以下是关于Java构造函数继承问题的关键知识点: 1. **继承默认构造函数**: - 子类只能继承父类的无参数(默认)构造函数。如果父类没有无参数的构造函数,那么子类无法直接继承任何构造函数。 - 缺省构造函数是...
Java继承时构造函数的调用机制是:子类的构造函数需要调用父类的构造函数,父类的无参数构造函数是默认的,如果父类没有提供无参数构造函数,而提供了其他类型的构造函数,那么编译器将报错。因此,我们最好给父类...
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
总的来说,本视频"18_构造函数"将详细讲解如何在Java中定义、调用和利用构造函数,以及它们在类继承和设计模式中的应用。对于学习和掌握Java面向对象编程来说,理解和熟练使用构造函数至关重要,因为它们是构建和...
构造函数重载是Java中的一个重要概念,它允许在一个类中定义多个构造函数,只要它们的参数列表不同即可。这样可以为创建对象提供多种方式,增加了灵活性和便利性。 例如,我们可以在`Car`类中添加额外的属性`price`...
在Java、C++或C#等面向对象的语言中,每当一个新对象被创建时,构造函数都会自动调用。 在聚合关系中,如果一个类A包含一个类B的对象作为其成员变量,那么在创建类A的对象时,类B的构造函数也会被调用。这个调用...
总的来说,理解和掌握构造函数、析构函数(以及在Java中的`finalize()`方法)、函数的重载、类的继承以及函数覆盖,对于提升Java编程能力至关重要。同时,设计模式的运用可以提高代码的可维护性和可扩展性,使得大型...
以下是对构造函数继承问题的详细解释: 1. 缺省构造函数:每个类都有至少一个构造函数。如果没有显式定义,编译器会为类提供一个默认的无参数构造函数,称为缺省构造函数。这个构造函数不做任何事情,仅仅是存在的...
在Java编程语言中,构造函数是一个特殊的方法,用于在创建对象时初始化对象的状态。这个视频教程"14_构造函数"应该深入讲解了Java中的构造函数及其重要性,特别是对于初学者,理解这一概念至关重要。 构造函数的...
Java语言是目前世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导...通过徐培成老师的讲解,学习者将能够深入理解Java中构造函数的概念、用法以及其在实际开发中的应用,从而提升编程技能和问题解决能力。
这通常通过`super`关键字(在Java中)或直接调用父类的构造函数(在C++中)实现。 总之,参数传递在构造函数中扮演着关键角色,它影响着对象的初始化过程。理解并掌握各种参数传递方式的差异和应用场景,能帮助我们...
Java中的继承和接口是面向对象编程的关键特性,它们在软件设计中扮演着至关重要的角色,实现了代码的重用和类的层次结构。 继承是Java中创建新类的一种方式,它允许一个子类(SubClass)从一个已存在的父类...
当我们谈论“java中与继承有关的程序内存分析”时,主要关注的是在Java程序运行时,内存是如何为继承体系的实例分配的。 Java内存主要分为三个区域:栈(Stack)、堆(Heap)和方法区(Method Area)。在讨论继承时...
子类可以在自己的构造函数中使用`super`关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句 - C. 在创建子类的对象时,将先执行继承自父类的无参构造函数,然后再执行自己的...
继承当中的构造函数规则 马克-to-win Java视频详细介绍
继承 构造函数 马克-to-win java视频的详细描述的介绍