• C# 面向对象——继承


    继承:代码文字结合理解

    class Program
        {
            static void Main(string[] args)
            {
                //Student s = new Student();
    
                //Driver d = new Driver();
                Student s = new Student("学生", 18, '', 101);
            }
        }
    
        /// <summary>
        /// 父类——人类
        /// </summary>
        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 void CHLSS()
            {
                Console.WriteLine("吃喝拉撒睡");
            }
    
    
    
            public Person(string name, int age, char gender)
            {
                this.Name = name;
                this.Age = age;
                this.Gender = gender;
            }
    
            public Person()
            {
    
            }
        }
    
        /// <summary>
        /// 子类——学生
        /// </summary>
        public class Student : Person
        {
    
            public Student(string name, int age, char gender, int id)
                : base(name, age, gender)
            {
                //this.Name = name;
                //this.Age = age;
                //this.Gender = gender;
                this.Id = id;
            }
    
    
            private int _id;
    
            public int Id
            {
                get { return _id; }
                set { _id = value; }
            }
    
    
    
            public void Study()
            {
                Console.WriteLine("学生会学习");
            }
        }
    
        /// <summary>
        /// 子类——老师
        /// </summary>
        public class Teacher :Person
        {
    
            public Teacher(string name, int age, char gender, double salary)
                : base(name, age, gender)
            {
                this.Salary = salary;
            }
    
            private double _salary;
            public double Salary
            {
                get { return _salary; }
                set { _salary = value; }
            }
            public void Teach()
            {
                Console.WriteLine("老师会讲课");
            }
        }
    
        /// <summary>
        /// 子类——司机
        /// </summary>
        public class Driver:Person
        {
    
            public Driver(string name, int age, char gender, int driveTime)
                : base(name, age, gender)
            {
                this.DirveTime = driveTime;
            }
    
    
            private int _dirveTime;
            public int DirveTime
            {
                get { return _dirveTime; }
                set { _dirveTime = value; }
            }
            public void Drive()
            {
                Console.WriteLine("司机会开车");
            }
        }

    我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
    单独的封装到一个类中,作为这些类的父类。
    Student、Teacher、Driver 子类 或 派生类
    Person 父类  或  基类
    问题:子类继承了父类,那么子类从父类那里继承过来了什么?
    首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
    问题:子类有没有继承父类的构造函数?
    答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
    创建父类对象,子类可以使用父类中的成员。
    所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
    子类就调用不到了,所以子类会报错。
    解决办法:
    1)、在父类中重新写一个无参数的构造函数。
    2)、在子类中显示的调用父类的构造函数,使用关键字:base()

     注意:子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。

    里氏转换
    1)、子类可以赋值给父类
    2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。

    is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
    as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null

  • 相关阅读:
    扫描线与悬线
    随机搜索与模拟退火
    树的直径相关
    分数规划及斜率优化
    数学-剩余系
    后缀数据结构
    AC自动机和KMP
    生命游戏和随机数之间某种不可言说的秘密
    转移了
    BZOJ 1710: [Usaco2007 Open]Cheappal 廉价回文
  • 原文地址:https://www.cnblogs.com/sxw117886/p/5646923.html
Copyright © 2020-2023  润新知