再谈多态,抽象类和接口

上一次博客已经概念性的概述了继承多态,抽象类和接口,这次来具体的谈一谈他们之间的联系和需要注意的地方。

一、继承和多态:Inheritance (继承) & Polymorphism(多态)

1、在父类中定义时:

创建的多态函数:注意使用virtual 关键字;

2、当子类实现父类并实现其特有的方法(覆盖父类的virtual方法)时:

注意使用override关键字

3、C#中的new关键字

   在子类中使用new关键字来声明方法,则说明此函数并不是override父类的方法

4、子类必须重新定义其自己的构造函数,父类的构造函数不被继承

如果想调用父类的构造函数或者函数,则需要使用base关键字

 5、几个访问修饰符的作用域

访问修饰符

被修饰元素访问限制

public

所有类都可访问

private

只有本类或本结构体重可以访问

protected

在本类或本结构体,或者在子类中可以被访问

internal

在同一个项目文件中可被访问

protected internal

在同一个项目文件或者其他项目文件中的子类中可被访问

二、抽象类(abstract class)

1、用abstract关键字声明抽象方法(方法隐式声明为virtual,且不能与static,virtual关键字混用)。

注意:在抽象类中也可以定义非抽象方法(即实现了内容的方法),当抽象类一定不能声明实体对象。

2、Abstract does force all the derived classes to implement the method, but nothing forces  the derived derived classes to implement its own method.

(即子类已经继承了父类,并且实现了其定义的抽象函数,则孙子类没必要继续override了)

3、与abstract class 对应的是sealed class(密封类)

密封类不允许被继承和派生

三、接口(interface)

1、接口的定义及使用时,注意:

  • 接口可以继续继承父接口从而产生新的接口
  • 定义的接口与抽象函数很像,但接口类里面所有方法必须全部是定义,而不能实现。
  • 接口中声明方法的定义时,不能加访问修饰符
  • 继承一个接口,则必须实现该接口中的所有方法!!!
  • 同一个类允许继承多个接口
  • 某个类继承接口实现其方法时允许添加virtual关键字,进而后续实现多态

 2、实现接口中的方法有两种;

隐式实现:访问修饰符   返回值类型  方法名{  ...  }

显示实现:返回值类型   接口名称 . 方法名{  ...   }    (注意:不能有访问修饰符)

且使用时:

最新文章

  1. 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)
  2. config配置文件的一些东西
  3. 微信app支付,服务端对接
  4. Fortify 4.0 帮助文档下载
  5. netcat
  6. jQuery中click()与trigger方法的区别
  7. Windows Server 2008 如何在IIS中添加MIME类型
  8. VS2015 + EF6连接MYSQL
  9. vim中SnipMate 和 YouCompleteMe 插件触发键 tab 冲突
  10. 【CSA72G】【XSY3316】rectangle 线段树 最小生成树
  11. Kafka遇到30042ms has passed since batch creation plus linger time at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.valueOrError(FutureRecordMetadata.java:94)
  12. Ubuntu下把缺省的dash shell修改为bash shell
  13. 格式代码出现两次oracle
  14. 优麒麟 16.04 LTS(长期支持)版本
  15. webpack.optimize.UglifyJsPlugin配置说明
  16. 编译darknet出现libpng16.so.16:对‘inflateValidate@ZLIB_1.2.9’未定义的引用
  17. linq left join ,inner join ,crossjoin
  18. 改写了禁用或启用oracle数据库的约束的存储过程
  19. 洛谷P4396 [AHOI2013]作业(树套树)
  20. Git 学习笔记--Git下的冲突解决

热门文章

  1. 纯js实现复制内容到剪切板
  2. python爬取数据需要注意的问题
  3. Java笔试题-线程编程方面
  4. jmeter多用户登录跨线程组操作传值
  5. Linux-Shell脚本编程-学习-4-Shell编程-操作数字-加减乘除计算
  6. C++学习010-将某个地址转化为指针
  7. 深挖 NGUI 基础 之UIRoot (一)
  8. LeetCode 36——有效的数独
  9. Structure From Motion(SFM,从运动恢复结构)
  10. AndroidStudio0.5.5发布