`

java继承时构造函数的调用

阅读更多

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继承中的构造函数调用规则如下: - 子类在实例化时,总会在其构造函数的第一行隐式或显式调用父类的构造函数。 - 如果父类没有无参数构造函数,且子类构造函数没有显式调用父类的有参构造函数,编译器...

    Java继承时构造函数的调用[借鉴].pdf

    Java继承时构造函数的调用机制是:子类的构造函数需要调用父类的构造函数,父类的无参数构造函数是默认的,如果父类没有提供无参数构造函数,而提供了其他类型的构造函数,那么编译器将报错。因此,我们最好给父类...

    聚合中类的构造函数调用顺序

    在这个主题中,“聚合中类的构造函数调用顺序”是一个关键概念,尤其是在多层嵌套的对象创建时。理解这个顺序对于编写健壮、无错误的代码至关重要。 首先,让我们明确构造函数的作用。构造函数是类的一个特殊方法,...

    构造函数的继承问题 笔记

    根据题目中的描述,我们可以总结出关于构造函数调用的一些关键规则: 1. **默认构造函数的自动调用**:如果父类没有任何显式声明的构造函数,则编译器会为父类自动生成一个默认构造函数。当子类的构造函数被调用时...

    Java构造函数的继承问题[收集].pdf

    3. **构造函数调用顺序**: - 在创建子类对象时,首先调用父类的默认构造函数,然后执行子类自己的构造函数。 - 这可以通过观察构造函数的输出顺序来验证,例如,在上述例子中,"base constructor"总是先于...

    构造函数继承.关于java

    同样地,子类也可以继承父类的构造函数,这是通过构造函数调用来实现的。子类的构造函数可以通过`super()`来显式调用父类的构造函数。如果没有显式调用,则默认会调用父类的无参构造函数。 #### 构造函数继承的示例...

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    18_构造函数 视频

    构造函数可以通过链式调用来组合使用,即一个构造函数调用另一个构造函数,这有助于代码复用和简化初始化过程。例如,一个构造函数可以调用另一个具有不同参数的构造函数,通过`this(参数列表)`来实现。 在Java中,...

    构造函数借鉴.pdf

    6. 示例分析:在提供的示例中,当`base`类有两个构造函数(一个无参,一个带int参数),`derived`类也有两个对应的构造函数时,子类的构造函数会默认调用父类的无参构造函数。如果注释掉父类的无参构造函数,子类的...

    Java:构造函数与对象

    例如,在下面的代码片段中,`Vehicle`类作为所有交通工具的基础类,`Car`类继承了`Vehicle`类,并且`Car`的构造函数通过`super`关键字调用了`Vehicle`的构造函数: ```java public class Vehicle { protected ...

    java kok 构造与析构函数

    当涉及到构造函数和析构函数时,子类在创建实例时会先调用父类的构造函数,确保父类的状态被正确初始化。这是通过在子类构造函数中使用`super()`关键字来实现的。例如: ```java public class ParentClass { ...

    参数传递的总结——构造函数

    6. **构造函数链**:当一个类继承自另一个类时,子类的构造函数可以调用父类的构造函数,以初始化父类的成员。这通常通过`super`关键字(在Java中)或直接调用父类的构造函数(在C++中)实现。 总之,参数传递在...

    14_构造函数 视频

    在Java编程语言中,构造函数是一个特殊的方法,用于在创建对象时初始化对象的状态。这个视频教程"14_构造函数"应该深入讲解了Java中的构造函数及其重要性,特别是对于初学者,理解这一概念至关重要。 构造函数的...

    dotnet C# 多次对一个对象调用构造函数会发生什么.rar

    4. **继承与多态**:如果类有继承关系,调用子类的构造函数会先调用父类的构造函数(如果没有显式指定,会调用无参构造函数)。如果父类构造函数中有对共享资源的初始化,多次调用可能会导致资源管理问题,如内存...

    【IT十八掌徐培成】Java基础第05天-01.回顾OOP-构造函数.zip

    当创建一个新对象时,Java会自动调用与之相对应的类的构造函数。构造函数的名字必须与类名相同,并且没有返回类型,包括void在内的任何类型都不能作为构造函数的返回类型。这是因为构造函数的主要目的是设置新对象的...

    java Person,Student,GoodStudent 三个类的继承、构造函数的执行

    由于`Student`类的这个构造函数会进一步调用`Person`类的带参数构造函数,所以创建`GoodStudent`对象时,整个构造函数调用链是`GoodStudent -> Student -> Person`。 通过在构造函数中打印日志(如`System.out....

    Java继承习题

    ### Java继承习题知识点解析 #### 一、基础概念与选择题分析 1. **final修饰的方法** - **题目**: 若在某一个类定义中定义有如下的方法:`final void workDial()`该方法属于 - A. 本地方法 - B. 最终方法 - C....

    java继承和多态PPT教案学习.pptx

    Java继承和多态PPT教案学习 本PPT教案主要讲解了Java中的继承和多态机制,包括继承、里式代换原则、多态和动态绑定、方法重载、重载构造函数和方法覆盖等概念。 继承是面向对象编程的基本机制之一,允许一个类继承...

    JAVA继承_接口_抽象类等练习.doc

    子类构造函数调用父类构造函数 **概念:** 子类可以通过`super`关键字来调用父类的构造函数。这是为了确保父类的初始化逻辑得以执行。 **选择题示例:** 第9题中,正确答案是C选项:“子类通过super关键字调用父类...

Global site tag (gtag.js) - Google Analytics