为什么子类会调用父类无参的构造函数

简介: 为什么子类会调用父类无参的构造函数

 0453d263e2b94eaabf2b2f38d6fbdefd.png

上图是报的错,下面是程序段

 public class Person
        {
            public Person(string name, int age)
            {
                this._name = name;
                this._age = age;
            }
            private string _name;
            public string Name
            {
                get { return _name; }
                set { this._name = value; }
            }
            private int _age;
            public int Age
            {
                get { return _age; }
                set { this._age = value; }
            }
            public void Show()
            {
                Console.WriteLine("我是人");
            }
        }
        public class Teacher : Person
        {
            public void Show()
            {
                Console.WriteLine("我是老师");
            }
        }

原因是父类中在没有无参的构造函数


但是为什么子类默认要调用父类的无参的构造函数呢?


是为了实现对象的实例化,不是很明白,再查原因是每一个子类构造函数内第一行都有隐式的 super();在对子类对象进行初始化时,父类的构造函数也会运行。super():会访问父类中空参数的构造函数。super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。


为什么子类一定要访问父类中的构造函数?

因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化。


如果父类中没有无参构造函数, 那么子类的构造函数内必须通过 super 语句指定要调用的父类中的构造函数.


若子类构造函数中用 this 来指定调用子类自己的构造函数, 那么被调用的构造函数也一样会调用父类中的构造函数.

子类中至少会有一个构造函数会访问父类中的构造函数。

子类每一个构造函数内的第一行都有一句隐式super()-黑马程序员技术交流社区 (itheima.com)

相关文章
|
9月前
|
C#
C# 继承类中(父类与子类)构造函数的调用顺序
C# 继承类中(父类与子类)构造函数的调用顺序
|
1月前
类的无参方法
类的无参方法
|
11月前
|
编译器 C++
<c++> 类的构造函数与类的析构函数
<c++> 类的构造函数与类的析构函数
79 0
|
编译器 C语言 C++
C++ 继承,构造函数,析构函数(上)
C++ 继承,构造函数,析构函数
|
编译器 定位技术
在父类的构造函数中调用虚函数为什么不能实现多态
在父类的构造函数中调用虚函数为什么不能实现多态
84 0
【为什么】构造函数中可以调用虚函数吗?
【为什么】构造函数中可以调用虚函数吗?
|
Java C++
C++类中在构造器中调用本类的另外构造器
C++类中在构造器中调用本类的另外构造器
83 0
学生类-构造函数
学生类-构造函数
129 0
|
开发者 Python
子类重写父类方法|学习笔记
快速学习子类重写父类方法,先来介绍子类重写父类方法。多态其实就是一种子类重写父类的方法。
162 0