C#(三、继承举例详解)

继 承 是 为 了 解 决 代 码 重 复 问 题 的 , 比 如 下 面 有 两 个 类 继承是为了解决代码重复问题的,比如下面有两个类 ,

class Dog
{ 
    public string Name { get; set; }
    public void Shout() { Console.WriteLine(this.Name + ":汪汪"); }
}
class Cat
{
    public string Name { get; set; }
    public void Shout() { Console.WriteLine(this.Name + ":喵喵"); }
}

可 以 看 到 C a t 类 和 D o g 类 几 乎 一 致 , 但 是 我 们 还 是 得 完 整 的 写 下 来 可以看到Cat类和Dog类几乎一致,但是我们还是得完整的写下来 CatDog,

继承可以很好的解决这个问题,相同的部分继承过来就好了嘛!

    class Animal
    {
        public string Name { get; set; }
    }

    class Dog:Animal
    { 
        public void Shout() { Console.WriteLine(this.Name + ":汪汪"); }
    }
    class Cat:Animal
    {
        public void Shout() { Console.WriteLine(this.Name + ":喵喵"); }
    }

可 以 看 到 在 D o g 和 C a t 后 面 加 上 : A n i m a l 表 示 继 承 可以看到在Dog和Cat后面加上:Animal表示继承 DogCat:Animal

此 时 , A n i m a l 叫 做 父 类 / 基 类 / 超 类 此时,Animal叫做\color{Red}父类/基类/超类 ,Animal//

C a t 和 D o g 叫 做 派 生 类 / 子 类 Cat和Dog叫做\color{Red}派生类/子类 CatDog/

要 点 一 、 C # 只 允 许 单 一 继 承 \color{Red}要点一、C\#只允许单一继承 C#

什 么 意 思 ? 意 思 是 D o g 后 面 只 能 继 承 一 个 父 类 什么意思?意思是Dog后面只能继承一个父类 ?Dog

比 如 现 在 D o g 后 面 继 承 的 是 A n i m a l , 那 就 不 能 再 接 其 他 的 了 比如现在Dog后面继承的是Animal,那就不能再接其他的了 DogAnimal,

要 实 现 多 继 承 , 需 要 使 用 接 口 这 个 概 念 . . . 下 一 篇 写 要实现多继承,需要使用接口这个概念...下一篇写 ,使...


问 题 一 、 想 从 父 类 继 承 私 有 属 性 , 怎 么 办 ? \color{Red}问题一、想从父类继承私有属性,怎么办? ,?

假 如 直 接 往 A n i m a l 里 面 写 个 p r i v a t e , 假如直接往Animal里面写个private, Animalprivate,

那 么 只 能 在 A n i m a l 这 个 类 里 面 访 问 , 根 本 达 不 到 继 承 的 目 的 呀 ! ! 那么只能在Animal这个类里面访问,根本达不到继承的目的呀!! Animal访,!!

protected关键字出现了,可以保证继承而不被外部访问

class Animal
{
    protected int beautiful { get; set; }//多添加的属性
    public string Name { get; set; }
}

class Dog:Animal
{
    public Dog() { this.beautiful = 2; }//构造方法,初始化beautiful
    public void Shout() { Console.WriteLine(this.Name + ":汪汪,美丽值是"+this.beautiful); }
}

问 题 二 、 类 型 转 换 \color{Red}问题二、类型转换

在 m a i n 函 数 中 创 建 上 面 的 类 , 正 常 写 法 在main函数中创建上面的类,正常写法 main,

Dog now = new Dog() {Name = "小黑"};
Console.WriteLine(now.Name);

使 用 类 型 转 换 使用类型转换 使

Animal now = new Dog() { Name = "小黑" };
Console.WriteLine(now.Name);

上 面 的 实 质 是 把 D o g 转 化 成 了 A n i m a l 对 象 上面的实质是把Dog转化成了Animal对象 DogAnimal

所 以 D o g 独 有 的 s h o u t 方 法 没 了 , 但 N a m e 仍 然 可 以 访 问 所以Dog独有的shout方法没了,但Name仍然可以访问 Dogshout,Name访

这么转换类型有什么好处?详见下一讲<多态>

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页