C#自学23一继承理解及继承特性

    科技2024-04-08  64

    1、继承 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员, 单独的封装到一个类中,作为这些类的父类。 Student、Teacher、Driver 子类 派生类 Person 父类 基类 子类继承了父类,那么子类从父类那里继承过来了什么? 首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。

    问题:子类有没有继承父类的构造函数? 答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数, 创建父类对象,让子类可以使用父类中的成员。 所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了, 子类就调用不到了,所以子类会报错。 解决办法: 1)、在父类中重新写一个无参数的构造函数。 2)、在子类中显示的调用父类的构造函数,使用关键字:base()

    2、继承的特性 1、继承的单根性:一个子类只能有一个父类。 2、继承的传递性 在c#中,所有的类都直接或间接的继承自了object类.(当我们定义一个类的时候,如果没有写:继承一个类,那么这个类就继承了object类)

    3、new关键字 1)、创建对象 2)、隐藏从父类那里继承过来的同名成员。 隐藏的后果就是子类调用不到父类的成员。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _09继承练习 { class Program { static void Main(string[] args) { //记者:我是记者 我的爱好是偷拍 我的年龄是34 我是一个男狗仔 //司机:我叫舒马赫 我的年龄是43 我是男人 我的驾龄是 23年 //程序员:我叫孙全 我的年龄是23 我是男生 我的工作年限是 3年 Reporter rep = new Reporter("狗仔", 34, '男', "偷拍"); rep.ReporterSayHello(); Programmer pro = new Programmer("程序猿", 23, '男', 3); pro.ProgrammerSayHello(); Console.ReadKey(); } } public class Person { 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 Person(string name, int age, char gender) { this.Name = name; this.Age = age; this.Gender = gender; } } public class Reporter : Person { public Reporter(string name, int age, char gender, string hobby) : base(name, age, gender) { this.Hobby = hobby; } private string _hobby; public string Hobby { get { return _hobby; } set { _hobby = value; } } public void ReporterSayHello() { Console.WriteLine("我叫{0},我是一名狗仔,我的爱好是{1},我是{2}生,我今年{3}岁了",this.Name,this.Hobby,this.Gender,this.Age); } } public class Programmer : Person { private int _workYear; public int WorkYear { get { return _workYear; } set { _workYear = value; } } public void ProgrammerSayHello() { Console.WriteLine("我叫{0},我是一名程序猿,我是{1}生,我今年{2}岁了,我的工作年限是{3}年",this.Name,this.Gender,this.Age,this.WorkYear); } public Programmer(string name, int age, char gender, int workYear) : base(name, age, gender) { this.WorkYear = workYear; } } }
    Processed: 0.016, SQL: 9