面向对象基础二-继承
一、封装
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。每个对象都包含能进行操作所需要的所有信息,这个特性就是封装,因此对象不必依赖其他对象来完成工作。
二、继承
对象继承就是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:      } 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号