继承

继承:把这几个子类重复的成员单独拿出来封装成一个类,作为它们几个共同的父类

using System;

namespace 继承
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student();
            
        }
        public class Person//父类有了Name、Age、Gender属性,还有一个CHLSS方法
        {
            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            private int _age;
            public int Age
            {
                get { return _age; }
                set { _age = value; }
            }
            private char _gender;
            public char Gender
            {
                get { return _gender; }
                set { _gender = value; }
            }
            public void CHLSS()
            {
                Console.WriteLine("我会吃喝拉撒睡");
            }
        }
        public class Student:Person//子类继承父类有的属性和方法
        {
            private int _id;
            public int Id
            {
                get { return _id; }
                set { _id = value; }
            }
            public void Study()
            {
                Console.WriteLine("学生会学习");
            }
        }

        public class Teacher:Person
        {
            private double _salary;
            public double Salary
            {
                get { return _salary; }
                set { _salary = value; }
            }
            public void Teach()
            {
                Console.WriteLine("老师会讲课");
            }
        }
    }
}

 子类继承了父类的什么?

继承了父类的:属性、方法

没继承父类的:私有字段、构造函数

 

子类虽然没有继承父类的构造函数,但是,子类实例化创建对象时会默认先调用父类无参数的构造函数。

为啥要调用父类的构造函数:因为子类创建父类的对象

为啥要创建父类的对象:子类要使用父类的成员,属性、方法。

 

 

 

继承父类后,报错解决办法:

1)如果父类写了一个有参的构造函数,子类就调不到了,要在父类中重新写一个无参数的构造函数。

public Person(string name,int age)//父类的构造函数
            {
                this.Name = name;
                this.Age = age;
                this.Gender = Gender;
            }
            public Person()//父类里再写个无参的,子类就调得到了
            { }

 

2)父类写了有参的构造函数,虽然调不到无参的了,但我可以用base关键字调用父类有参的构造函数。

 

    public Person(string name,int age,char gender)//父类的构造函数
            {
                this.Name = name;
                this.Age = age;
                this.Gender = gender;
            }
                  
        public class Student:Person
        {
            public Student(string name,int age,char gender,int id)//把main方法那边的值依次的传给属性
                :base(name,age,gender)//调用父类构造函数
            { 
                
            }

 

posted @ 2023-03-21 15:59  春哥博客  阅读(24)  评论(0)    收藏  举报