夜灵的c#笔记Day14 面向对象.多态

什么是多态

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

在运行时,可以通过调用同一个方法,来实现派生类中不同表现。

c#中多态的实现形式

方法重载

虚方法

抽象方法

接口

 

虚方法

什么是虚方法

如果实例方法声明中有virtual修饰符,可以将实例方法称为“虚方法”。

如果没有virtual修饰符,可以将实例方法称为“非虚方法”。

可以在派生类中重写父类虚方法,在派生类我们可以用override修饰符。

重写返回类型相同、签名相同的且同名虚方法。

虚方法不能私有。

 

virtual

在基类中我们可以通过virtual关键字声明一个虚方法。

override

在派生类中我们可以通过override关键字重写签名相同的虚方法。

sealed

在派生类中我们可以通过sealed封闭一个虚方法的重写

 

 

抽象方法

抽象方法是没有实现代码的虚方法;

也叫纯需方法;

抽象方法使用abstract修饰符进行声明,只能在同一声明了abstract的类中使用;

继承了抽象类的子类必须实现抽象类的所有抽象方法。

 

抽象类

用abstract修饰过的类是抽象类

抽象类无法被实例化

子类如果继承自抽象类,那么子类必须实现abstract类中所有的abstract成员。

定义抽象类

访问修饰符 abstract class 类名

{

    访问修饰符 abstract 函数名;

}

 

虚方法及抽象类的选择

如果父类中的方法有默认的实现,并且父类需要被实例化,

这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。

 

如果父类中的方法没有默认实现,父类也不需要被实例化,

则可以将该类定义为抽象类。

 

接口

访问修饰符  interface  接口名

{

    属性;

    方法

}

 

1.接口定义了可由类和结构实现的协定;

2.接口可以包含方法、属性、事件和索引器。不包含字段;

3.接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结构提供的成员;

4.接口是多重继承的,一个接口可以继承另一个接口或者多个接口,一个类可以继承一个或者多个接口;

5.接口的声明与类基本一致;

6.接口 的方法和属性均不允许实现;

7.接口不能有构造,不能有字段,不能重载运算符;

8.接口中成员必须为public。

 

接口的优势

多继承,可以让类更灵活,并在减少代码重复的情况下降低代码关联性(耦合);

多套:程序可扩展性,节约成本,提高效率;

两个不同类型的物体,具有相同行为,考虑使用接口。

接口的使用 

访问修饰符  类名:基类,接口名1,接口名2

{

    属性;

    方法

}

1.继承关系中如果有类,必须是第一个;

2.继承了接口的类必须实现该接口的所有成员;

3.接口可以继承接口,但不能继承类。

 

如果我们继承了多个接口有相同名字的成员,我们可以使用显示实现接口来区别不同的成员

接口名.成员{ }

 

显示实现的目的是区别2个接口 同名方法;

显示实现界面不能加载访问修饰符,默认private;

显示实现的接口不能直接通过类对象来调用。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值