c# 继承

1、继承
我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
单独的封装到一个类中,作为这些类的父类。
Reporter、Programer、Driver  子类  派生类
Person                                      父类  基类
1)子类继承了父类,那么子类从父类那里继承过来了什么?

首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。

2)子类有没有继承父类的构造函数?

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

2、继承的传递性: a继承b,a可以调用b的方法和属性,但是b又继承了c,所以a也可以调用c的方法和属性。

举例:

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 我是一个男狗仔
            //程序员:我叫孙全 我的年龄是23 我是男生 我的工作年限是 3年
            //司机:我叫舒马赫 我的年龄是43 我是男人  我的驾龄是 23年

            Reporter rep = new Reporter("记者", 34, '男', "偷拍");//新建类对象
            rep.ReporterSayHello();//调用方法


            Programmer pro = new Programmer("程序猿", 23, '男', 3);
            pro.ProgrammerSayHello();


            Driver dri = new Driver("舒马赫", 43, '男', 23);
            dri.DriverSayHello();

            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;
        }
    }
    public class  Driver :Person
    {
        private int _driveyear;
        public int Driveyear
        {
            get { return _driveyear; }
            set { _driveyear = value; }
        }
        public void DriverSayHello()
        {
            Console.WriteLine("我叫{0},我的年龄是{1},我是{2}生,我的驾龄是{3}年", this.Name, this.Age, this.Gender, this.Driveyear);
        }
        public Driver(String name, int age,char gender,int driveyear)
            :base(name,age,gender)
        {
            this.Driveyear = driveyear;
        }
    }
    

}
输出结果:

我叫记者,我是一名狗仔,我的爱好是偷拍,我是男生,我今年34岁了
我叫程序猿,我是一名程序猿,我是男生,我今年23岁了,我的工作年限是3年
我叫舒马赫,我的年龄是43,我是男生,我的驾龄是23年

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值