面向对象基础二-继承
一、封装
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。每个对象都包含能进行操作所需要的所有信息,这个特性就是封装,因此对象不必依赖其他对象来完成工作。
二、继承
对象继承就是is-a的关系。
如果子类继承父类,那么(1)子类拥有父类非private的属性和功能;(2)子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;(3)子类还可以以自己的方式实现父类的功能(方法重写)
还是以动物为了,我们如果要创建一个狗叫“旺”的提示框,最原始的做法就是和Cat类几乎一样的创建一个Dog的类,但是,我们发现里面大部分代码都是一样的,所以,我们可以通过继承,首先创建一个Animal的父类,然后Cat类和Dog类继承Animal父类。
1: class Animal
2: {
3: protected string name = "";
4: public Animal(string name)
5: {
6: this.name = name;
7: }
8: public Animal()
9: {
10: this.name = "无名";
11: }
12: protected int shoutNum = 3;
13: public int ShoutNum
14: {
15: get { return shoutNum;}
16: set { ShoutNum = value; }
17: }
18: }
需要注意的地方:在C#中,子类从父类中继承的成员有方法、域、属性、事件、索引指示器,但对于构造方法,有一些特殊,它不能被继承,只能被调用。对于调用父类的成员,可以用base关键字。
1: class Cat : Animal
2: {
3: public Cat()
4: : base()
5: { }
6: public Cat(string name)
7: : base(name)
8: { }
9: public string Shout()
10: {
11: string result = "";
12: for (int i = 0; i <= shoutNum; i++)
13: {
14: result += "喵 ";
15: }
16: return "我的名字叫" + name + "," + result;
17: }
18: }
19: class Dog:Animal
20: {
21: public Dog()
22: : base()
23: { }
24: public Dog(string name)
25: : base(name)
26: { }
27: public string Shout()
28: {
29: string result = "";
30: for (int i = 0; i <= shoutNum; i++)
31: {
32: result += "旺 ";
33: }
34: return "我的名字叫" + name + "," + result;
35: }
36: }