一直没有搞明白过这两个是什么鬼,今天读了好几篇文章,认真的研究了一下,还是有进步的,整理笔记
http://www.cnblogs.com/Mryang-blog-cn/p/cxl.html
http://yinny.iteye.com/blog/1152430
http://www.cnblogs.com/tianxue/p/5641555.html
http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html
抽象类
不能被实例化的类被称为抽象类,抽象类是派生类的基类
public abstract class TestAbstract
{
//抽象类不能进行实例化,只能被继承
public void ShiFunInAbs()
{
Console.WriteLine("ShiFunInAbs");
}
public abstract void AbsFunInAbs();
}
internal class TestAbstractSon : TestAbstract
{
public override void AbsFunInAbs()
{
Console.WriteLine("AbsFunAbs");
}
}
static void Main(string[] args)
{
#region 测试抽象类
TestAbstractSon testAbstractSon = new TestAbstractSon();
testAbstractSon.ShiFunInAbs();
testAbstractSon.AbsFunInAbs();
Console.ReadKey();
#endregion
}
- 抽象类可以同时包含抽象方法和非抽象方法
- 抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型,不涉及主体代码
- 派生自抽象类的类需要实现其基类的抽象方法,才能实例化对象
- 使用override关键字可以在派生类中实现抽象方法,经override声明重写基类方法,其签名必须与override方法签名相同。
- 基类实现抽象类,则派生类不需要重新实现该抽象类
- 抽象类并不仅仅只是一种实现技巧,它更代表一种抽象的概念,从而为所有的派生类确立一种约定。
——————————————————————————————————
接口
public interface InterfaceTest
{
void ConsoleInfo();
}
- 一个接口就相当于一个抽象类,但是它不能包含任何实现方法
- 接口的每个方法必须都在派生类中进行实现
- 接口有时候可以看成是类的模具,它指明一个类该提供哪些内容
- 接口只限于方法、索引器、属性的声明,不能包含字段、构造器和常量等
- 接口成员是隐式公开的,如果对其进行显示指定访问级别,就会出现编译器错误
- 在指定方法时,只需要给出返回类型、名称和参数列表,然后以分号结束
- 实现接口的语法同实现类,以冒号隔开,只能继承一个基类,但是可以继承多个接口
- 接口中的方法只能实现,不能重写
—————————————————————————————————
public interface InterfaceTest
{
void ConsoleInfo();
}
/// <summary>
/// 继承类中的公共方法,并且在抽象类中定义自己的个性方法
/// </summary>
public abstract class SonOfInterface:InterfaceTest {
public void ConsoleInfo() {
Console.WriteLine("Interface in abstract class");
Console.ReadKey();
}
//定义自己的个性方法
public abstract void ConsoleAdd();
}
public class GrandSon1OfIntereface : SonOfInterface
{
public override void ConsoleAdd()
{
Console.WriteLine("1+1=2");
Console.ReadKey();
}
}
public class GrandSon2OfIntereface : SonOfInterface
{
public override void ConsoleAdd()
{
Console.WriteLine("2+2=4");
Console.ReadKey();
}
}