什么是抽象类:光说不做,不能被实例化的类
抽象类的特点:
1,需要用abstract关键字标记
2,抽象方法不能有任何方法实现,所以没有方法体
3,抽象成员必须包含在抽象类中
4,由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
5,抽象类不能实例化,抽象成员不能是私有的。
6,抽象类中可以包括抽象成员,可以包括有具体代码的成员
7,抽象方法不能被static修饰
publicabstractvoidShowNationality();
抽象类的作用:就是为了让子类继承。
抽象类的意义:
1,抽象类不能被实例化,只能被继承
2,继承抽象类的子类必须把抽象类中的所有抽象成员都重写(除非子类也是抽象类)
3,抽象类就是为了重写(代码重用)
4,抽象类中可以有实例成员也可以有抽象成员
抽象类定义的是公共的实现和能力
抽象类为子类提供所需要的成员
抽象类中的成员既可以有实现(实例成员)也可以无实现(抽象成员)
一个类只能继承一个抽象类(类的单根继承性)
虚方法和抽象方法的区别
1)虚方法必须有实现,抽象方法必须没有实现
2)抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中
3)抽象方法必须在子类中重写,虚方法可以被重写
抽象类实现多态
class Program
{
static void Main(string[] args)
{
Person p = new American();//new Chinese();
p.Show();
p.SayHi();
Console.ReadKey();
}
}
#region 使用抽象方法abstract来实现多态
public abstract class Person
{
public static string Email;
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
public abstract void Show();
public abstract void SayHi();
}
//子类继承Person类
public class Chinese : Person
{
public override void Show()
{
Console.WriteLine("Show in Chinese");
}
public override void SayHi()
{
Console.WriteLine("SayHi in Chinese.");
}
}
public class American : Person
{
public override void Show()
{
Console.WriteLine("Show in American");
}
public override void SayHi()
{
Console.WriteLine("SayHi in American");
}
}
#endregion