8. 多态

类的多态:

  (1)多态性就是指在程序运行时,不同对象对同一个方法调用的不同行为。即执行的虽然是一个调用方法的语句,却可以根据派生类对象的不同类型完成不同方法的具体实现;

  (2)实现多态性:方法重载、方法覆盖、方法重写、接口实现。

1、方法重载:同一类中,方法名相同,参数的列表与返回值不同。

2、方法覆盖:子类继承父类而且这是必须的,在子类中用 new 关键字修饰 定义的与父类中同名的方法,叫覆盖。

3、方法重写:重写方法即用相同的签名重写所继承的方法,即具有相同的方法名、返回类型和参数表。(使用关键字 override)

  、若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚方法。此方法在子类中可以重写(使用关键字 override);

  抽象方法

    (1)抽象类不明确提供实现方法,必须由其子类实现它 的抽象方法;

    (2)定义基类中的抽象方法,则派生类必须重写该方法;

    (3)抽象方法一定属于抽象类,但抽象类不一定要包含抽象方法;

    (4)如果我们不需要使用父类创建对象,他的存在只是为供子类继承。可以将父类写成抽象(关键字 abstract)类,将父类写成抽象方法,子类中的方法仍用关键字 override 重写。

例1:虚方法的创建与调用:

 1     class class1 //新建一个类
 2     {
 3         //默认的方法是被指定为私有的,只能在当前类中进行访问。若需要在其他类中进行访问,
 4         //就需要将其指定为 public
 5         public virtual void virtualMethod()//新建一个虚方法
 6         {
 7             Console.WriteLine("这是一个虚方法");
 8         }
 9 
10         public void notVirtualMethod()//新建一个非虚方法
11         {
12             Console.WriteLine("这是一个非虚方法");
13         }
14     }
15     class Program
16     {             
17         static void Main(string[] args)
18         {
19             //调用虚方法和非虚方法
20             class1 c1 = new class1();
21             c1.virtualMethod();
22             c1.notVirtualMethod();
23             Console.ReadKey();            
24         }        
25     }

 

例2:重写虚方法:

 1     class class1 //新建一个类
 2     {
 3         //新建一个虚方法,
 4         //如果在方法中加入 sealed 关键字,
 5         //即 public virtual sealed void virtualMethod()则不允许class2重写方法
 6         public virtual void virtualMethod()                                                                  
 7         {
 8             Console.WriteLine("这是一个虚方法,可以被重写");
 9         }
10     }
11 
12     //再建一个继承类用于重写方法,class2继承与class1
13     class class2 : class1                                   
14     {
15         public override void virtualMethod()
16         {
17             Console.WriteLine("这是一个重写方法");
18         }
19     }

4、接口实现:(接口名称一般以 “I” 作为首字母)

  (1)接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和结构可以实现接口;
  (2)接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员;
  (3)可以利用接口实现多态,同时接口也弥补了C#单一继承的弱点;
  (4interface 关键字定义接口,接口成员的访问级别是默认的(public);
  (5)接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类。

5、sealed密封类:

  (1)密封类表示不能继承该类,密封方法表示不能重写该方法;
  (2)可以覆盖父类的密封方法,与父类中的方法是否为密封没有关系。

6、关键字的理解:

  (1)interface: 引入方法的名称,需要实现接口里面所有的方法;
  (2)virtual: 方法的第一个实现,以后还希望子类去不断完善重写他;
  (3)override: 方法的另一个实现;
  (4)sealed: 方法的最后一个实现。方法已经很完善了,我们不需要子类去重写他。

7、使用什么方法实现多态,取决于我们是否需要使用基类实例化的对象。需要时使用虚方法,不需要时使用抽象类。

 

转载于:https://www.cnblogs.com/yx-xiansheng/p/7627364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值