首页 > 其他分享 >多态

多态

时间:2022-08-21 23:11:28浏览次数:53  
标签:实现 子类 多态 接口 抽象类 父类 方法

0. 多态

在继承关系的前提下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不停的行为,这就叫做多态。

在C#中体现多态的三种方式:虚方法、抽象类、接口。

1、虚方法

在父类中使用virtual关键字修饰的方法,就是虚方法。在子类中可以使用override关键字对该虚方法进行重写。

虚方法语法

父类:
    public virtual 返回值类型 方法名()
  {
    方法体代码;
    }
子类:
     public override 返回值类型 方法名()
  {
    方法体代码;
    }

使用细节

①将父类的方法标记为虚方法,就是在父类方法的返回值前加virtual关键字,表示这个方法可以被子类重写。

②子类重写父类方法,在子类的方法的返回值前加override关键字。

③父类中的虚方法,子类可以重写,也可以不重写。

④父类中用virtual修饰的方法,可以用于实现该方法共有的功能(比如初始化该方法),然后在子类重写该方法时,使用base关键字调用父类中的该方法。

2、抽象类

抽象方法

父类里面用virtual关键字修饰的方法叫做虚方法,子类可以使用override重新该虚方法,也可以不重写。.

虚方法还是有方法体的,当我们父类中的这个方法已经虚到完全无法确定方法体的时候,就可以使用另外一种形式来表现,这种形式叫抽象方法。

抽象方法语法

抽象方法的返回值类型前用关键字abstract修饰,且没有方法体。

抽象方法必须存在于抽象类中。

一个类如果定义为抽象类,那么里面可以没有抽象方法

一个类中如果有抽象方法,那么这个类必定是一个抽象类

抽象类不能被实例化,可以实例化非抽象子类的对象

抽象类的所有非抽象子类必须重写抽象类中的抽象方法

抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

3、接口

当抽象类中所有的方法都是抽象方法的时候,这个时候可以把这个抽象类用另外一种形式来表示,就是接口。

使用关键字interface创建的数据类型,没有class关键字,接口名一般使用“IXxx”这种方式进行书写,在一堆脚本中通过名字判断,I开头的一般都是接口。

 

接口的语法特点:

1、接口中不能包含字段,可以包含:行为【方法,属性,索引器,事件】

2、接口中的所有成员不能加任何访问修饰符,全部默认公有public

3、接口中的所有成员不能有实现,全部默认抽象的(不能有方法体)

4、实现类实现接口用“:”与继承相同

5、实现类实现可以实现多个接口,且每个接口中所有的成员必须都实现(即实现类可以继承多个接口,不同于类只能继承一个)

6、接口中的成员在实现类中以public的方式实现(除显式实现)

7、接口的引用可以指向实现类的对象 接口 obj=new 实现类()

interface IFly
{
    void Fly();
}
//Batmobile继承Car类,实现IFly接口
class Batmobile:Car,IFly
{
  public Batmobile(string brand):base(brand){}
  public void Fly()
  {
    Console.WriteLine("{0}在飞行",base.brand);
  }
}

注意事项:

1、类继承接口 Class A : interface B,interface C类需要实现继承接口中所有的方法,支持多继承

2、接口继承接口 interface A :interface B,interface C接口不能实现继承接口的任何方法,支持多继承

3、struct结构体可以继承接口,但是不能继承类

类实现接口的方式:

1、隐式实现

public 数据类型 接口方法(){方法体}

2、显示实现(非常规用法,很少用,了解一下就好)

数据类型 接口名.接口方法(){方法体}

当成私有方法使用,外部无法访问,除非 接口 A = new 继承类,此时A可以在外部访问。

显示实现的作用。

1、解决接口中的成员对实现类不适用的问题。

即:接口中有若干方法该类不需要实现,使用显示实现在外部写代码时将不会显示。一定程度上减少代码污染,

2、解决多接口实现时的二义性问题(用的更少)

即:接口A中有跑步的方法,接口B中也有跑步的方法,当一个类同时继承的时候,系统不知道想实现哪个接口,此时可以使用显示实现,不用也不会报错。

 

标签:实现,子类,多态,接口,抽象类,父类,方法
From: https://www.cnblogs.com/tenyuan/p/16594504.html

相关文章

  • 面向对象——多态
    多态即同一方法可以根据发送对象的不同而采用不同的行为方式多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形......
  • 26、多态性与鸭子类型
    26、多态性与鸭子类型  多态与多态性多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪classAnimal:#同一类事物:动物deftalk(self)......
  • [Python学习笔记]Python基础-13 面向对象编程_继承和多态
    继承面向对象的编程有三大特性封装:函数是对语句的封装类是对函数和变量的封装继承类和类之间可以人为,手动的建立父子关系父类的属性和方法,子类可以使用......
  • Java面向对象—封装、继承、多态
    Java面向对象—封装、继承、多态在对面向对象的特征进行分析之前,先让我们来了解一下什么是面向对象。面向对象与面向过程:面向过程:是一种以过程为中心的编程思想,面向过程......
  • 《JavaStudy36》多态
     ......
  • java12 - 封装+继承+多态
    封装该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据......
  • java学习笔记008 面向对象(四)多态
    1.向上转型//向上转型再向下转型可2.instanceof关键字Objectperson=newPerson();if(personinstanceofPerson){ Personp=(Person)person;//Person类引用......
  • Three---面向对象与面向过程/属性和变量/关于self/一些魔法方法的使用/继承/super方法
    python的面向对象面向对象与面向过程面向过程面向过程思想:需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做)......
  • 面向对象:多态
    多态就是同一个方法根据不同的发送对象而采取多种不同的操作(属性没有多态!)一个对象的实际类型是确定的例如:newPerson();newStudent();但是可以指向对象的引用的类......