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类几乎一致,但是我们还是得完整的写下来

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

    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表示继承

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

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

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

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

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

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


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

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

A n i m a l 访 , ! ! 那么只能在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函数中创建上面的类,正常写法

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对象

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

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

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107237965