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

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

 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)

相关文章
C# 继承类中(父类与子类)构造函数的调用顺序
C# 继承类中(父类与子类)构造函数的调用顺序
|
1月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
12 0
|
4月前
|
Java
子类的父类和接口具有共同的方法
子类的父类和接口具有共同的方法
33 7
|
6月前
类的无参方法
类的无参方法
|
编译器 C语言 C++
C++ 继承,构造函数,析构函数(上)
C++ 继承,构造函数,析构函数
|
编译器 定位技术
在父类的构造函数中调用虚函数为什么不能实现多态
在父类的构造函数中调用虚函数为什么不能实现多态
112 0
【为什么】构造函数中可以调用虚函数吗?
【为什么】构造函数中可以调用虚函数吗?
|
Java C++
C++类中在构造器中调用本类的另外构造器
C++类中在构造器中调用本类的另外构造器
98 0
重写父类方法和调用父类方法
class Animal(object): def eat(self): print("-----吃-----") def drink(self): print("-----喝-----") class Dog(Animal): def...
908 0