抽象类abstract与接口interface的区别
2014-07-10 19:02
477 查看
相同点:
接口和抽象类都不能直接实例化,但可以声明它们的变量(利用多态性把继承这两种类型的对象指定给它们的变量)
区别:
1. 派生类只能继承一个抽象类(父类),但可以使用多个接口
2. 抽象类可以拥有抽象成员和非抽象成员(可被实现),而接口成员都不能被实现(没有代码体)
3. 接口不能包含字段,构造函数,析构函数,静态成员或常量
附测试代码:
运行结果:
接口和抽象类都不能直接实例化,但可以声明它们的变量(利用多态性把继承这两种类型的对象指定给它们的变量)
区别:
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(); } } }
运行结果:
相关文章推荐
- 抽象类(abstract)和接口(interface)的区别
- 抽象类(Abstract) && 接口(Interface)区别比较
- 抽象类(abstract)和接口(interface)的区别
- 什么是接口?接口有哪些好处,抽象类(abstract)和接口(interface)的区别
- 抽象类(abstract)和接口(interface)的区别
- 抽象类(abstract)与接口(interface)的区别?
- PHP的接口类(interface)和抽象类(abstract)的区别
- 抽象类(abstract)和接口(interface)的区别
- 抽象类(abstract)和接口(interface)的区别
- 抽象类合接口的区别 (abstract与interface)
- 抽象类(abstract)与接口的区别(interface)
- abstract 和 interface 抽象类和接口的区别
- 抽象类(abstract)和接口(interface)的区别
- 抽象类abstract和接口interface的区别与深入思考
- 什么是接口?接口有哪些好处,抽象类(abstract)和接口(interface)的区别
- .net 抽象类(abstract)和接口(interface)区别
- 类(class),抽象类(abstract), 接口(interface)的关系和区别
- [Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别
- the Differences between abstract class & interface in C#接口和抽象类的区别
- 抽象类(abstract)和接口(interface)的区别