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);
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 st2=new Student();
System.out.println("---------------------------");
System.out.println("st2:");
Student st=new Student("zhangshan",76,"武大");
System.out.println("---------------------------");
System.out.println("st3:");
Student st3=new Student("lisi",24,"武大","研究生");
}
}
/*
=======================================
输出如下:
E:\JavaWork>java Test
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)
分享到:
相关推荐
总结一下,Java继承中的构造函数调用规则如下: - 子类在实例化时,总会在其构造函数的第一行隐式或显式调用父类的构造函数。 - 如果父类没有无参数构造函数,且子类构造函数没有显式调用父类的有参构造函数,编译器...
Java继承时构造函数的调用机制是:子类的构造函数需要调用父类的构造函数,父类的无参数构造函数是默认的,如果父类没有提供无参数构造函数,而提供了其他类型的构造函数,那么编译器将报错。因此,我们最好给父类...
在这个主题中,“聚合中类的构造函数调用顺序”是一个关键概念,尤其是在多层嵌套的对象创建时。理解这个顺序对于编写健壮、无错误的代码至关重要。 首先,让我们明确构造函数的作用。构造函数是类的一个特殊方法,...
根据题目中的描述,我们可以总结出关于构造函数调用的一些关键规则: 1. **默认构造函数的自动调用**:如果父类没有任何显式声明的构造函数,则编译器会为父类自动生成一个默认构造函数。当子类的构造函数被调用时...
3. **构造函数调用顺序**: - 在创建子类对象时,首先调用父类的默认构造函数,然后执行子类自己的构造函数。 - 这可以通过观察构造函数的输出顺序来验证,例如,在上述例子中,"base constructor"总是先于...
同样地,子类也可以继承父类的构造函数,这是通过构造函数调用来实现的。子类的构造函数可以通过`super()`来显式调用父类的构造函数。如果没有显式调用,则默认会调用父类的无参构造函数。 #### 构造函数继承的示例...
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
构造函数可以通过链式调用来组合使用,即一个构造函数调用另一个构造函数,这有助于代码复用和简化初始化过程。例如,一个构造函数可以调用另一个具有不同参数的构造函数,通过`this(参数列表)`来实现。 在Java中,...
6. 示例分析:在提供的示例中,当`base`类有两个构造函数(一个无参,一个带int参数),`derived`类也有两个对应的构造函数时,子类的构造函数会默认调用父类的无参构造函数。如果注释掉父类的无参构造函数,子类的...
例如,在下面的代码片段中,`Vehicle`类作为所有交通工具的基础类,`Car`类继承了`Vehicle`类,并且`Car`的构造函数通过`super`关键字调用了`Vehicle`的构造函数: ```java public class Vehicle { protected ...
当涉及到构造函数和析构函数时,子类在创建实例时会先调用父类的构造函数,确保父类的状态被正确初始化。这是通过在子类构造函数中使用`super()`关键字来实现的。例如: ```java public class ParentClass { ...
6. **构造函数链**:当一个类继承自另一个类时,子类的构造函数可以调用父类的构造函数,以初始化父类的成员。这通常通过`super`关键字(在Java中)或直接调用父类的构造函数(在C++中)实现。 总之,参数传递在...
在Java编程语言中,构造函数是一个特殊的方法,用于在创建对象时初始化对象的状态。这个视频教程"14_构造函数"应该深入讲解了Java中的构造函数及其重要性,特别是对于初学者,理解这一概念至关重要。 构造函数的...
4. **继承与多态**:如果类有继承关系,调用子类的构造函数会先调用父类的构造函数(如果没有显式指定,会调用无参构造函数)。如果父类构造函数中有对共享资源的初始化,多次调用可能会导致资源管理问题,如内存...
当创建一个新对象时,Java会自动调用与之相对应的类的构造函数。构造函数的名字必须与类名相同,并且没有返回类型,包括void在内的任何类型都不能作为构造函数的返回类型。这是因为构造函数的主要目的是设置新对象的...
由于`Student`类的这个构造函数会进一步调用`Person`类的带参数构造函数,所以创建`GoodStudent`对象时,整个构造函数调用链是`GoodStudent -> Student -> Person`。 通过在构造函数中打印日志(如`System.out....
### Java继承习题知识点解析 #### 一、基础概念与选择题分析 1. **final修饰的方法** - **题目**: 若在某一个类定义中定义有如下的方法:`final void workDial()`该方法属于 - A. 本地方法 - B. 最终方法 - C....
Java继承和多态PPT教案学习 本PPT教案主要讲解了Java中的继承和多态机制,包括继承、里式代换原则、多态和动态绑定、方法重载、重载构造函数和方法覆盖等概念。 继承是面向对象编程的基本机制之一,允许一个类继承...
子类构造函数调用父类构造函数 **概念:** 子类可以通过`super`关键字来调用父类的构造函数。这是为了确保父类的初始化逻辑得以执行。 **选择题示例:** 第9题中,正确答案是C选项:“子类通过super关键字调用父类...