`

Java中关于构造函数继承的相关问题

    博客分类:
  • 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);

//此处调用了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、即使子类中的构造函数有参数,如果他没有显示调用父类中的构造函数,他仍然会默认调用父类中的默认构造函数
0
0
分享到:
评论

相关推荐

    Java继承时构造函数的调用

    在这个场景中,我们关注的是Java继承时构造函数的调用规则。 首先,每个Java类都有一个或多个构造函数,它们的主要作用是在创建对象时初始化对象的状态。如果一个类没有显式定义任何构造函数,Java编译器会自动生成...

    构造函数继承.关于java

    ### 构造函数继承在Java中的应用 构造函数继承是面向对象编程中一个重要的概念,尤其是在Java这样的语言中。本文将深入探讨构造函数继承的概念、原理及其在Java中的实现方式。 #### 构造函数的基本概念 在Java中...

    构造函数的继承问题 笔记

    在Java中,构造函数可以被重载以提供不同的初始化方式,但它们不能被继承。这意味着,当一个类继承自另一个类时,子类不会自动继承父类的构造函数。为了确保子类能够正确地初始化其父类部分,需要特别注意构造函数的...

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

    以下是关于Java构造函数继承问题的关键知识点: 1. **继承默认构造函数**: - 子类只能继承父类的无参数(默认)构造函数。如果父类没有无参数的构造函数,那么子类无法直接继承任何构造函数。 - 缺省构造函数是...

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

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

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

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

    18_构造函数 视频

    总的来说,本视频"18_构造函数"将详细讲解如何在Java中定义、调用和利用构造函数,以及它们在类继承和设计模式中的应用。对于学习和掌握Java面向对象编程来说,理解和熟练使用构造函数至关重要,因为它们是构建和...

    Java:构造函数与对象

    构造函数重载是Java中的一个重要概念,它允许在一个类中定义多个构造函数,只要它们的参数列表不同即可。这样可以为创建对象提供多种方式,增加了灵活性和便利性。 例如,我们可以在`Car`类中添加额外的属性`price`...

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

    在Java、C++或C#等面向对象的语言中,每当一个新对象被创建时,构造函数都会自动调用。 在聚合关系中,如果一个类A包含一个类B的对象作为其成员变量,那么在创建类A的对象时,类B的构造函数也会被调用。这个调用...

    java kok 构造与析构函数

    总的来说,理解和掌握构造函数、析构函数(以及在Java中的`finalize()`方法)、函数的重载、类的继承以及函数覆盖,对于提升Java编程能力至关重要。同时,设计模式的运用可以提高代码的可维护性和可扩展性,使得大型...

    构造函数借鉴.pdf

    以下是对构造函数继承问题的详细解释: 1. 缺省构造函数:每个类都有至少一个构造函数。如果没有显式定义,编译器会为类提供一个默认的无参数构造函数,称为缺省构造函数。这个构造函数不做任何事情,仅仅是存在的...

    14_构造函数 视频

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

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

    Java语言是目前世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导...通过徐培成老师的讲解,学习者将能够深入理解Java中构造函数的概念、用法以及其在实际开发中的应用,从而提升编程技能和问题解决能力。

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

    这通常通过`super`关键字(在Java中)或直接调用父类的构造函数(在C++中)实现。 总之,参数传递在构造函数中扮演着关键角色,它影响着对象的初始化过程。理解并掌握各种参数传递方式的差异和应用场景,能帮助我们...

    Java 接口与继承

    Java中的继承和接口是面向对象编程的关键特性,它们在软件设计中扮演着至关重要的角色,实现了代码的重用和类的层次结构。 继承是Java中创建新类的一种方式,它允许一个子类(SubClass)从一个已存在的父类...

    java中与继承有关的程序内存分析

    当我们谈论“java中与继承有关的程序内存分析”时,主要关注的是在Java程序运行时,内存是如何为继承体系的实例分配的。 Java内存主要分为三个区域:栈(Stack)、堆(Heap)和方法区(Method Area)。在讨论继承时...

    Java继承习题

    子类可以在自己的构造函数中使用`super`关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句 - C. 在创建子类的对象时,将先执行继承自父类的无参构造函数,然后再执行自己的...

    继承当中的构造函数规则---马克-to-win Java视频

    继承当中的构造函数规则 马克-to-win Java视频详细介绍

    继承当中的构造函数规则2---马克-to-win java视频

    继承 构造函数 马克-to-win java视频的详细描述的介绍

Global site tag (gtag.js) - Google Analytics