【C#】封装继承

前言

        封装,继承,多态是面向对象的三大特性中的前两个特性。封装让类与类之间耦合度大大降低,继承可以是代码精简。

封装

        每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其他对象来完成自己的操作。就像一个房子的墙一样,隔绝了房子内部与外界的联系,而类中的public方法和属性,就是这栋房子的门和窗,起到对外连接的作用。

优点

1、减少耦合。

2、类内部自由修改。

3、类具有清晰的对外接口。

继承

        对象的继承代表一种“is-a”的关系,继承者是对被继承者的特殊化,除了具备被继承者的特性外,它还有自己的特性。通俗点说,就是,企鹅是鸟,那么企鹅就继承了鸟的特征,但是它有自己的特征,他不会飞。

要点

如果子类继承父类:

1、子类拥有父类非private的属性和功能。

2、子类具有自己的属性和功能。

3、子类还可以用自己的方式实现父类的功能(方法重写)。

例子

        前面说道,让有名字的猫叫,现在又有一个新的要求,让狗也叫。当我们实现了代码后,会发现这两个程序代码相似度特别高,这就违反了我们编程的原则,这时候该怎么办呢?对,继承,我们要把相同的代码,尽可能的放到父类中去,让子类去继承。

class Animal
{
    protected string name = "";
    public Animal(string name)
    {
        this.name = name;
    }
    public Animal()
    {
        this.name = "无名";
    }
    protected int shoutNum = 3;
    public int ShoutNum
    {
        get{return shoutNum;}
        set{shoutNum = value;}
    }
}
        然后,我们就要写子类,让他们去继承Animal。这样,重复的代码我们就可以不用写了,如果再有需求,让一个小兔子叫两声,我们只需要写一个子类去继承Animal就行了(兔子怎么叫不要问我,人艰不拆)。在C#中,子类从父类中继承的成员有方法,属性,事件,索引指示器,但对于构造方法,它不能被继承,只能被调用,这也就是我们在做设计模式的例子时遇到的base关键字。下面,我举个例子,让我们的小狗去叫。

class Dog : Animal
{
    public Dog() : ()
    {}
    public Dog(string name) : base(name)
    {}
    public string Shout()
    {
        string result = "";
        for (int i = 0; i < shoutNum; i++)
            result += "汪,";
        return "我的名字叫:" + name + " " + result;
    }
}
        这样,我的狗就可以愉快的叫了。

        用了继承,重复的代码减少了,而且,使我们的修改变得很容易。但是,继承也是有缺点的,就是父类变,子类不得不变,而且会使父类和子类的耦合度变大。

        那么又要问了,社么呢时候用继承会好呢?当两个类具备“is a”的关系时,就可以用继承,但当两个类是“has a”时,就不能用继承了,比如,我有一个大脑袋,大脑袋就不能继承我了。

总结

        封装继承是我们在学习面向对象语言时最基础的思想,也是最重要的思想,它让我们的代码变的简洁易维护,在以后的博客中,还会提到面向对象的第三大特性,多态。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值