接口,抽象类,虚方法,重写(interface,abstract class,virtual function,override)

1.抽象类和虚方法的区别(abstract,virtual function)

看到抽象和虚这两词真的觉得有点抽象,有点犯迷糊.其实这两者还是很容易区分的.

1.abstract可以修饰class和class中的成员.而且必须是class被abstract修饰了,里面的成员才能被abstract修饰.而virtual不能用来修饰class.只能用来修饰其中的成员.virtual可用于一般的class中,也可用于被abstract修饰的抽象类中.

2.抽象类不能被实例化.例如定义一个抽象类abstract class Dosomething() { };你这样去用肯定不行:Dosomething do = new Dosomething();

抽象类必须被继承并重写了其中的抽象方法才能被实例化.抽象方法里面是啥都没有的.只有个方法的定义在那,不能在里面去实现任何功能,然后必须在继承的子类中重写了才能用.而virtual方法不能只是个定义必须要实现.在继承的子类中可以被重写然后再用,也可以不重写直接用,用法和一般方法一样

2.为啥要搞个搞抽象类,抽象方法和虚方法出来呢?

虚方法和抽象方法可以用来实现多态,抽象类是实现和接口类似的功能.

一.首先说下多态吧.

我们知道面向对象的最主要的三个特性就是封装,继承,多态.多态简单的说就是通过继承创建的多个class,调用相同的方法(即返回类型,方法名,参数列表都相同.)实现了不同的功能.它是通过在继承中重写(override)相同的方法实现的.

另外有个词叫重载,那是指只参数名字相同.参数列表必须不同.

举个多态的简单例子吧:

//基类:

public class Person

{

public virtualvoid Do()

{

Console.WriteLine("Do something");

}

}

//继承的类:

public class Cheater:Person

{

public override void Do()

{

Console.WriteLine("Go to take money from some fools");

}

}

public class Killer:Person

{

public override void Do()

{

Console.WriteLine("Go to kill somebody");

}

}

Class PersonDo--测试类
{
Static void
Main(string[] args)

{

Person cheater = new Cheater();

cheater.Do();

Person killer = new Killer();

killer.Do();

}
}

--结果为:Go to take money from some fools

-- Go to kill somebody


我们也可以把基类改成抽象类,继承子类不变.运行结果跟上面一样.

public abstract class Person

{

public abstract void Do();

}

二.抽象类和接口的区别:

接口与抽象类有些相同的地方:

1.不能实例化 2.具有没有实现的方法.3.只有被继承的子类实现了没实现的方法才能实例化

不同点:

1.抽象类也是一种特殊的类.所有也只能单继承.接口则可以多继承

2.接口中的方法不能被public,private等修饰符修饰.它默认是为public.

3.接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员

4.接口中的方法都不能实现.而抽象类可以实现一部分方法或者全部实现.就跟一般的class一样.

抽象类体现的是类的概念,是某一类事物的抽象,有该类事物的属性,及各种方法.而接口主要是某一组共同操作的集合.比如动物都有sleep,eat的方法.则可以定义一个接口,有sleep,eat两个方法.鸟类具有属性,两只脚,有羽毛.有方法飞行,下蛋.则可以定义一个抽象类.

其实只是为了设计的方便,清晰易懂而去做这样的考虑.你如果要把接口和抽象类不做区别的混淆使用,也完全是可以的.只要注意那些细微的语法区别.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值