示例:
控制台应用程序中,“Program.cs”类文件中源码:
定义抽象类关键字:abstract
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _02抽象方法实现多态
{
//3种方法实现多态之抽象类
//virtual,子类重写父类中的方法。
//abstract,子类重写父类中的方法。
//接口,实现接口的类,将接口中的方法实现。
//做网站的公司(抽象类) 你给我活我去开发网站,但是网站需要一部分flash,我公司力都是程序员(抽象类中有实现的方法)。
//没人会做flash(抽象方法),于是我把做flash这部分工作给其它公司去做(重写抽象方法的类)
//多态性的含义:使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。
//多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。(多态)
//如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,采用虚方法来实现多态;
//如果父类中没有默认实现,父类也不需要被实例化,则可将该类定义为抽象类。
//主程序
class Program
{
static void Main(string[] args)
{
Chinese cn = new Chinese();
cn.Show();
Console.ReadKey();
//**抽象类是不能被实例化的。(抽象类的作用就是为了让继承。)**
//Person p = new Person();
}
}
//1.这个类也必须标记为abstract(抽象)的。
//2.抽象成员必须写在抽象类中。不能写在一个实例中。
//3.抽象类中一定有构造函数。虽然不能被实例化
public abstract class Person
{
//4.在抽象类中可以包含实例化成员
public string Name
{
get;
set;
}
//5.可以包含抽象方法、属性、索引器、事件。【这几个最终都是方法】
//6.Age为抽象属性,没有任何实现,区别于自动属性Name
public abstract int Age
{
get;
set;
}
public void SayHi()
{
Console.WriteLine("我不抽象....");
}
//7.抽象方法不能有任何方法体。(不能有任何实现 {这里面的内容} )
//8.抽象成员不能是private
public abstract void Show();
//{
//}
}
public class Chinese : Person
{
//9.父类中的抽象成员,子类继承以后必须重写所有抽象成员(例外:除非子类也是一个抽象类。)
public override int Age
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override void Show()
{
Console.WriteLine("我是中国人!!");
}
}
public abstract class Japanese : Person
{
//抽象类中,可以不对父类的抽象方法、抽象属性进行重写
}
}
输出结果如下: