一、封装
1.封装是什么?
封装就是:每个对象都包含它能进行操作所需要的所有信息。比如Cat 类,里面包含着它的方法和属性,客户端通过实例来实现。
2.为什么要有封装?(优点)
(1)良好的封装可以减少耦合。比如我们创建的Cat类和客户端类分离了,这样减少了他们之间的耦合,其中一个类做修改,不影响其他类。
(2)类内部的实现可以自由的修改。比如,我们在Cat类中可以做很大的修改。
(3)类具有清晰的对外接口。比如我们在Cat类中创建的Shout方法,在客户端我们可以直接实现这个功能
3.封装的优缺点:
优点在第二条已经说了,它有三个优点。
那他有没有缺点呢?当然有。
我们已经写了一个猫类,如果现在让你写个狗类,你只需要把猫类的东西复制过来,然后把名字改了即可,可见他们之间的代码有90%都是一样的,显然这样是不行的。那现在我们就要用到面向对象的第二大特性了“继承”。
二、继承
1.继承是什么?
继承是类与类的一种关系,是一种“is-a”的关系。比如“狗”继承“动物”,这里动物类是狗类的父类或者基类,狗类是动物类的子类或者派生类。
注意:在C#中,子类从他的父类中继承的成员有方法、域、属性、事件、索引指示器,但对于构造方法,有一些特殊,他不能被继承,只能被调用。
2.继承的优点?
(1)子类拥有父类非Private的属性和功能
什么叫非private,除了private 还有两个比较常用的修饰符,public 公有的,在本类或者其他类都可以调用,是公开的。另一个是:protected。protected表示继承时子类可以对父类有完全的访问权,也就是说,用protected修饰的类成员,对于子类是公开的,但对于其他类不公开。所以子类继承于父类,则子类就拥有了父类的除private外的属性和功能。
(2)子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能。
比如猫类可以有上树的功能。狗类有追兔子的功能。
(3)子类还可以以自己的方式实现父类的功能(方法重写)
子类如果对继承的父类的方法不满意(不适合),可以自己编写继承的方法,这种方式就称为方法重写。
当调用方法时会优先调用子类的方法。
重写要注意:
a、返回值类型
b、方法名
c、参数类型及个数
都要与父类继承的方法相同,才叫方法的重写。
重载和重写的区别:
方法重载:在同一个类中处理不同数据的多个相同方法名的多态手段。
方法重写:相对继承而言,子类中对父类已经存在的方法进行区别化的修改。
3.继承的优缺点
优点在第二条已经体现出来了,那么继承有没有缺点呢,当然有啦,
继承的缺点就是:父类变,子类不得不变。继承会破坏包装,父类实现细节暴露给子类,两个类之间存在着耦合性。
继承有缺点,我们到底该不该用呢?
当两个类之间具备is-a的关系时,我们就可以考虑用继承了
三、多态
1.多态是什么?
按字面意思来看,多态就是对象的多种形态。多态表示不同的对象可以执行相同的操作,但要通过他们自己的实现代码来执行。
比如:我们的国粹“京剧”以前都是子承父业,代代相传的艺术。假设现在有这样一对父子,父亲是非常有名的京剧艺术家,儿子长大成人,模仿父亲的戏也是惟妙惟肖。有一天父亲突然得病了,不能上台表演了,而票已经卖出,退票显然会大大影响声誉。怎么办呢?由于京戏都是需要化妆才可以上台的,于是就决定儿子代表父亲上台表演。儿子在表演的时候,是以父亲的身份出现的,所以儿子自己的绝活是不能表现出来的。儿子模仿的再好,那也是模仿,儿子只能用自己理解的表现方式去模仿父亲的作品。儿子可以代表父亲上台表演,但是儿子要通过自己的方式去模仿父亲的操作。这就是多态。
那么儿子怎么用自己的方式去模仿父亲的操作呢?这就用到了虚方法和重写。为了让儿子能顺利的代表父亲去表演,父亲中的方法必须是虚拟的,这样才能让儿子去重写父亲的方法。例子如下:
class Animal
{
protected string name;
public Animal(string name)
{
this.name = name;
}
public Animal()
{
this.name = "无名";
}
public virtual string Shout()
{
return "";
}
}
class Cat :Animal
{
public Cat ():base()
{
}
public Cat (string name):base( name)
{
}
public override string Shout()
{
return "喵";
}
}
在父类中把Shout()虚化,然后在子类中重写该方法。当猫(子类)代表动物(父类)表演Shout(),但Cat叫出来的是“喵”。如果在有一个Dog类,那么Dog叫出的是“汪”。这就是不同的对象可以执行相同的操作,但是要通过自己来实现。
看了这些例子,面向对象的三大特种就容易懂了吧。如文中有不足之处,还望大神们多多指教。