C# 关于类的继承的总结

C# 关于类的继承的总结

1、父类和子类(基类和派生类)

在类的继承中,被继承的类叫做基类(与派生类并提)或父类(与子类并提),继承的类叫做派生类或子类。子类继承父类的属性、方法等,但子类没有继承父类的私有(private)字段。

public class Person
{
    
    
    public string _name;
    private int _age;
    
    public void SayHello()
    {
    
    
        Console.WriteLine("大家好,我是{0},我是人类", _name);
    }
}

public class Student:Person
{
    
    

}

class Program
{
    
    
    static void Main(string[] args)
    {
    
    
        Student stu = new Student();
        stu._name = "李明";
        stu.SayHello();//输出:大家好,我是李明,我是人类
        Console.ReadKey();
    }
}

子类对象无法访问父类私有字段:

在这里插入图片描述

2、继承的特性

  1. 单根性

    子类只能继承一个父类,但一个父类可以有多个子类。所以C#不支持多重继承
    
  2. 传递性

    继承是可以传递的。子类不仅继承父类中声明的成员,也继承父类的父类中的声明成员。
    
    public class ancestor
    {
          
          
        public char _gender;
    }
    public class parent:ancestor
    {
          
          
        public string _name;
    }
    public class child:parent
    {
          
          
    
    }
    class Program
    {
          
          
        static void Main(string[] args)
        {
          
          
            child ch = new child();
            ch._name = "李华";
            ch._gender = '女';
        }
    }
    
  3. 自动隐藏性

    如果子类与父类存在相同的函数名,父类会自动隐藏该函数。因此子类调用与父类相同函数名的函数时,调用的是子类或者说是自己的函数。
    
    public class Person
    {
          
          
        public void SayHello()
        {
          
          
            Console.WriteLine("大家好,我是人类");
        }
    }
    
    public class Student:Person
    {
          
          
    	//如果有意隐藏,请使用关键字 new
        public new void SayHello()
        {
          
          
            Console.WriteLine("大家好,我是学生类");
        }
    }
    
    class Program
    {
          
          
        static void Main(string[] args)
        {
          
          
            Student stu = new Student();
            stu.SayHello();//输出:大家好,我是学生类
            Console.ReadKey();
        }
    }
    
    new的两个作用:
    
    1、创建类的对象
    2、隐藏从父类继承的同名成员,隐藏后子类调用不到父类成员
    

3、调用父类的构造函数

子类没有继承父类的构造函数,但子类默认会调用父类无参数的构造函数。调用父类无参构造函数是为了创建父类对象,让子类可以使用父类中的成员。

如果在父类写一个有参构造函数,子类无法调用无参数构造函数,会报错。

在这里插入图片描述
解决办法:

  1. 在父类重新写一个无参数的构造函数

    public class Person
    {
          
          
        public string _name;
        public int _age;
        
        public Person()
        {
          
          
    
        }
        
        public Person(string name, int age)
        {
          
          
            _name = name;
            _age = age;
        }
    }
    
    public class Student:Person
    {
          
          
        
    }
    
    class Program
    {
          
          
        static void Main(string[] args)
        {
          
          
            Student stu = new Student();
            stu._name = "李华";
            stu._age = 18;
            Console.ReadKey();
        }
    }
    
  2. 在子类中使用关键字【base】显示调用父类构造函数

    public class Person
    {
          
          
        public string _name;
        public int _age;
    
        public Person(string name, int age)
        {
          
          
            _name = name;
            _age = age;
        }
    }
    
    public class Student:Person
    {
          
          
        public Student(string name, int age):base(name, age)
        {
          
          
    
        }
    }
    
    class Program
    {
          
          
        static void Main(string[] args)
        {
          
          
            Student stu = new Student("李华", 18);
            Console.ReadKey();
        }
    }
    

因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。

猜你喜欢

转载自blog.csdn.net/qq_46051312/article/details/123315660
今日推荐