抽象(abstract)
何为抽象?
通俗来讲就是在定义的时候,我们并不知道是用来干什么的,只有在具体使用的时候我们才知道要具体做什么(自己的理解,大佬勿喷)
最近在回顾基础知识,自己也是十九线码农一个,才开始写博客文章,简单记录一下,废话不多说,直接开始!
用最常见的动物举例,在没有抽象类时,我们可以声明一个基类来代表动物,并为其封装好基本的公共行为,其它的小猫和小狗直接继承动物基类就ok了。简单代码如下:
动物基类 (抽象类)
abstract class Animal {
private string name;
//名字
public string Name {
get {return name;}
set{value = name;}
}
//动物叫的行为
public abstract void AniCall();
}
普通基类
体会与抽象类的区别,这里用动物举例,声明的动物基类是不知道具体的类别的,因此基类中的AniCall()
方法体中输入动物的叫声是不恰当的。只有在具体的实例化时才知道所输出的叫声是什么声音。 上面的只是实现了一个抽象方法,在具体类别的时候才具体实现。
class Animal {
private string name;
//名字
public string Name {
get {return name;}
set{value = name;}
}
//动物的叫声
public virtual void AniCall()
{
Debug.Log("动物的叫声");
}
}
小狗类
class Dog : Animal {
public override void AniCall()
{
Debug.Log("汪汪汪");
}
}
小猫类
class Cat : Animal
{
public override void AniCall()
{
Debug.Log("喵喵喵");
}
}
测试
Dog dog = new Dog();
dog.Name = "小狗";
dog.AniCall();
Cat cat = new Cat();
cat.Name = "小猫";
cat.AniCall();
简单举这么一个小例子体会一下。
总结:
- 抽象类不能实例化
- 继承抽象类必须实现抽象方法
- 抽象方法没有方法体
- 抽象类中可以有构造函数
- 抽象类中可以申明普通方法、虚方法、抽象方法;