一、前言
在学习C#的时候经常会看到一个名词“抽象类”,那什么是抽象类,抽象类是用来干什么的,在看了很多博客和资料,都说的很官方,理解起来很难,并且好多博客资料都是不断地抄袭抄袭,写的千篇一律,基本都很相似,那下面小编就根据自己的理解说以下抽象来,结合抽象类把抽象方法也说了。
抽象方法:在类中没有方法体的方法,就是抽象方法。
抽象类:含有抽象方法的类就叫抽象类。
二、抽象类
1、什么是抽象类
抽象类中的方法既可以有抽象方法,也可以有非抽象方法,可以全部都是抽象方法,也可以全部都是非抽象方法
抽象方法只能出现在抽象类或接口中,不能出现在非抽象类中
抽象类和接口不能new对象
抽象类可以继承抽象类,也可以继承非抽象类
2.概念
笼统的,模糊,不具体的类
3.示例图
为什么说笼统的呢?从上图可以看出来,图中有个动物类,那动物类是一个很广的范围, 它只是一个概念,我们很难把动物这个类很具体的表现出来。所以它是一种笼统的,模糊,不具体的类。
4.个人理解
我们可以把抽象类看作是类的集合,把类看成是对象的集合,这样一类我们对抽象类的理解就清晰多了。
那抽象类有什么样的特点呢?
方法只有声明没有实现,需要被abstract关键字修饰,抽象方法必须定义在抽象类中,该类也必须被abstract关键字修饰
抽象类不可以被实例化,因为调用抽象方法没意义
抽象类必须有其子类覆盖了所有的抽象方法后,才可以被实例化,否则这个子类还是是个抽象类
1.抽象方法只能定义在抽象类中,抽象的方法和抽象的类必须由关键字abstract修饰。
2.抽象类值只定义方法声明,不定义功能主题(即方法的实现)。
3.抽象类不可以被创建对象。
抽象类就是一个不存在的东西,人们无法定义它,
抽象方法和抽象类又absctract修饰
5.性质:
a、抽象类只能用作其他类的基类,不能建立抽象类对象实例。
b、抽象类不能用作参数类型、函数返回类型、或显示转换的类型,
但可以声明指向抽象类的指针变量、此指针可以指 向它的派生类,进而实现多态性
c、如果在抽象类的派生类中没有重新说明纯虚函数,则该函数在派生类中
仍然为纯虚函数,而这个派生类仍然还是一个抽象类。
看看实例
//动物类代码
//动物类代码
public abstract class Animal
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
public abstract void Shout();
}
public class Pig : Animal
{
public override void Shout()
{
Console.WriteLine("哼哼叫");
}
}
//客户端代码
static void Main(string[] args)
{
Pig pig = new Pig();
pig.Shout();
Console.ReadKey();
}
三、抽象方法
为什么要用抽象方法,它有什么好处?
抽象方法是一个模板或约束,避免了子类的随意性,需要实现它的类必须重写它的抽象那个方法。
举个例子
就拿动物的抽象类来说,我们定义一个叫声的方法,我们只知道有个方法,让动物叫,可是动物多了,到底让那个叫我们并不知道,它只是一个抽象的类,不具体,也没有指明让那个对象叫。这也就是说抽象方法为什么没有方法体了,如果有方法体我们就可以准确的知道那个动物叫了,它的叫声什么可以准确的形容出来了。要是我们想要准确的知道某个动物的叫声是什么就要重写它。