您的位置:首页 > 其它

抽象类abstract与接口interface的区别

2014-07-10 19:02 477 查看
相同点:

接口和抽象类都不能直接实例化,但可以声明它们的变量(利用多态性把继承这两种类型的对象指定给它们的变量)

区别:

1. 派生类只能继承一个抽象类(父类),但可以使用多个接口

2. 抽象类可以拥有抽象成员和非抽象成员(可被实现),而接口成员都不能被实现(没有代码体)

3. 接口不能包含字段,构造函数,析构函数,静态成员或常量

附测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestInterface
{
//定义接口
interface IInterfaceTest
{
//接口成员不能被实现
void InterfaceFunc();
}

//定义抽象类
abstract class AbstarctClass
{
//抽象类可以拥有抽象成员和非抽象成员(可以实现)
private string stringField = "AbstractClass::ConcreteFunc";
public abstract void AbstractFunc();
public void ConcreteFunc()
{
Console.WriteLine(stringField);
}
}

class TestClass : AbstarctClass, IInterfaceTest
{
public void InterfaceFunc()//必须实现接口成员,并且是public的
{
Console.WriteLine("TestClass::InterfaceFunc");
}
public override void AbstractFunc()//必须实现抽象类成员,并且是public的
{
Console.WriteLine("TestClass::AbstractFunc");
}

}

class Program
{
static void Main(string[] args)
{
//多态性测试,分别为接口对象和抽象类对象
IInterfaceTest interfaceObj = new TestClass();
interfaceObj.InterfaceFunc();
Console.WriteLine();

AbstarctClass abstractObj = new TestClass();
abstractObj.AbstractFunc();
abstractObj.ConcreteFunc();
Console.WriteLine();

//父类对象可强制类型转化成子类对象
TestClass testObj = (TestClass)abstractObj;
testObj.AbstractFunc();
testObj.InterfaceFunc();

Console.ReadLine();
}
}
}


运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: