1.抽象类
特征:
1.被abstract修饰
2.不能直接实例化
3.不能用Sealed或者private或者protected修饰
4.包含抽象方法,也可包含非抽象方法
5.抽象方法没有方法体,且必须非私有
6.子类继承抽象类,必须重写所有非私有抽象方法
举个栗子:
定义一个人类的抽象类
abstract class Person
{
private int age=12;
public int Age
{
get { return age; }
set { age = value; }
}
public string name = "张三";
protected abstract void Speak();//说话
public abstract string Eat(string foodName);//吃
}
派生类继承抽象类
class Chinese : Person
{
protected override void Speak()
{
Console.WriteLine("我说中文");
}
public override string Eat(string foodName)
{
return foodName;
}
}
测试结果:
static void Main()
{
Chinese chinese = new Chinese();//实例化派生类
Person person = chinese;//也可以将对象赋值给父类
int age = chinese.Age;
Console.WriteLine("年龄:{0},姓名:{1},食物:{2}",age,chinese.name,chinese.Eat("饺子"));
Console.ReadKey();
}
2.接口
特征:
1.接口成员总是共有的,所以申明是不允许使用修饰符,即使public
2.可多继承接口,用,隔开
3.接口方法没有方法体
4.成员不能有字段,意思是成员不能以;结尾
5.不能直接实例化
同样举个栗子:
接口1
interface Interface1
{
int Add();//加法
}
接口2
interface Interface2
{
int Add();
int a{get;set;}
}
实现两个接口
class Chinese : Person,Interface2,Interface1
{
public int Add()
{
a = 6;
return a;
}
int A;
public int a
{
get { return A; }
set { A = value; }
}
}
3.区别
3.1相同点
1.都不能直接实例化
2.抽象方法和接口方法都没有方法体
3.派生类必须实现全部抽象成员、接口成员
3.2不同点
1.(抽象)类可以实现一个或多个接口,接口不能继承类。
2.接口不能申明字段,抽象类可以
3.派生类必须实现接口所有成员,但只需重写抽象类的抽象方法
4.抽象类属于类,有构造方法和析构函数。接口没有
5.抽象类方法签名可以是protected或者public。接口方法隐式为public
6.抽象类可以有静态方法
7.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。