【重构】
在前面面向对象三大特性中介绍了有其他动物来报名参加叫声比赛,如果再有更多的小动物来比赛呢?我们在实现相应的动物的类,在继承Animal,这时候我们会发现还有大量重复的代码,那该怎么办呢?这时候我们就可以用到重构了。
重构:指同一个类有 多个同名构造函数 ,但他们参数 不完全相同
abstract class Animal
{
protected string name = "";
public string Shout()//变为普通方法
{
string result = "";
for (int i = 0; i < shoutNum; i++)
result += getShoutSound() + ", ";//调用一个虚方法getShoutSound
return "我的名字叫" + name + " " + result;
}
}
各个动物的代码
class Dog:Animal
{
public Dog(): base()
{ }
public Dog(string name): base(name)
{ }
protected override string getShoutSound()
{
return "汪汪汪";
}
}
【抽象类】
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
特点:
一、抽象类不能实例化
二、抽象方法必须被子类重写的方法,抽象方法可以被看成是没有实体的虚方法
三、如果类中包含抽象方法,那么类就是必须定义为抽象类,不论是否包含其他一般方法。