• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C# 类的继承的

武飞扬头像
WilhelmLiu
帮助1

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();
        }
    }
    
    学新通

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjaghc
系列文章
更多 icon
同类精品
更多 icon
继续加载