8. 多态

Posted LiuChangwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8. 多态相关的知识,希望对你有一定的参考价值。

类的多态:

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

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

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

2、方法覆盖:子类继承父类而且这是必须的,在子类里重新定义这个方法。

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

  、若一个实例方法的声明中含有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、使用什么方法实现多态,取决于我们是否需要使用基类实例化的对象。需要时使用虚方法,不需要时使用抽象类。

 

以上是关于8. 多态的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段8——声明函数

java中封装,继承,多态,接口学习总结

多态性和动态铸造

第8章 多态

Java编程思想8.多态

8.多态