初学者在学习C#过程中,对面向对象概念,接口、抽象等关系往往难以准确理解。本文主要通过简单举例对接口、抽象类等概念进行简单说明,希望对初学者有所帮助,如有不对之处欢迎批评指正。


接口interface

接口简单理解就是一种规范,是由一组函数声明组成。 它既不能直接实例化为对象,也不能定义数据成员。因此,接口只是方法和属性声明的集合。在接口的实现过程中需要将所声明的方法全部实现。

抽象类

类是一个具有相同特征和行为的抽象,而抽象类(class 前加上 abstract)没有指出行为的具体细节,而由他的子类去实现相应的行为。与接口相比较抽象类可以由属性、方法,其方法包括抽象方法与非抽象方法。抽象类也不能被实例化,只能通过引用子类实例化。

举例分析说明

本文以动物、猫、鸡、鱼对接口与抽象类进行说明。首先我们创建动物抽象类animal,该类具有name属性,Breathe()方法与Move()方法,其中Move()方法为抽象方法,即在子类中需要实现(重写)。anlimal抽象类描述如下:

animal抽象类

定义接口类Imove,该接口声明了两个方法,分别为move()与eat(),这两个方法需要在子类中全部实现。接口的声明定义如下:

定义接口类Imove

猫cat类继承了动物类animal的属性与方法,因此cat类是animal的派生类,Cat类同时可以有自身的属性与方法。Cat类定义描述如下:

cat类

在Cat类中需要对其基类中所定义的抽象方法Move进行重写,注意关键词override的使用。而对非抽象方法Breathe则直接继承使用,无需重写,另外Cat添加了自身的单独方法voice用于输出猫的叫声。同样我们可以继续定义鸡Chicken类,派生于基类animal。定义如下:

Chicken类

最后我们通过Fish类对接口实现及抽象类的继承进行说明,Fish类继承于animal类与接口Imove,其定义形式如下:

Fish类

该类由于继承了animal与Imove因此需要对animal中的抽象方法Move进行重写,同时需要对Imove接口声明的方法进行实现。上图中实现了move方法与eat方法,通过override重写了抽象类的Move方法。最后在主函数部分对各类进行实例化及函数调用。截图如下:

类的实例化及函数调用

执行结果输出


以上给出了抽象类与接口的使用,通过animal、fish、cat等类的设计对两者之间在使用过程中的语法及区别进行了简单分析。通过分析最终可以获取以下结论。

接口与抽象类的区别


本头条号长期关注于青少年编程资讯分享;编程课程、素材、代码分享及青少年编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。期待大家关注!

C# 子类实例化基类 基类使用不了子类的方法_C# 接口与抽象类实例分析相关推荐

  1. 为什么派生的子类报错不能实例化抽象类_C# 接口与抽象类实例分析

    初学者在学习C#过程中,对面向对象概念,接口.抽象等关系往往难以准确理解.本文主要通过简单举例对接口.抽象类等概念进行简单说明,希望对初学者有所帮助,如有不对之处欢迎批评指正. 接口interface ...

  2. 设计一个扩展自抽象类geometricobject的新的triangle类_C++ 接口(抽象类)

    C++ 接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现. C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念. 如果类中至 ...

  3. java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题

    Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自 ...

  4. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型

    一.接口 1.1简介: 接口是一种特殊的引用类型, 和类很相似. 它定义了属性, 方法, 事件, 这些都作为接口的成员/ 接口中只包含成员的声明, 成员的定义是派生类的责任(谁继承谁实现). 接口在某 ...

  5. C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题

    一.简答题 1.简述C#中的所有访问修饰符及访问权限 private(私有的) 给类,及所有类成员使用 所有类成员的默认访问修饰符 可访问范围 当前类自身 public(公开的) 给类,及所有类成员使 ...

  6. C# 子类实例化基类 基类使用不了子类的方法_老话题:6个方法,检验你有没有正确使用设计模式...

    方法一:设计模式是为了消除继承 大部分设计模式,是让你在在面向对象的基础上尽量消除继承的手段.所以,如果你用了一些设计模式,减少了继承,那你八成用对了.如果你用了一大堆设计模式,然而继承却越来越频繁, ...

  7. C# 子类实例化基类 基类使用不了子类的方法_C#中的类、方法和属性

    这节讲C#中的类,方法,属性.这是面向对象编程中,我们最直接打交道的三个结构.    类: 类(class)是面向对象中最基本的单元,它是一种抽象,对现实世界中事物的抽象,在C#中使用class关键字 ...

  8. 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

     常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...

  9. 基类、派生类、虚基类、虚函数、虚析构、纯虚函数、抽象类

    基类:被其它类通过继承方式作为父类继承的类称为基类:描述派生类的统一种类的方式. 派生类:通过继承其他类(并可能含有自定义成员)实现的子类:为提高代码的重用性及与同样继承于同一个父类的其它类形成统一种 ...

  10. python 基类 派生类_在Python中具有两个子(派生)类的继承示例

    python 基类 派生类 In this program, we have a parent class named Details and two child classes named Empl ...

最新文章

  1. javascript学习之基本概念
  2. Boost:字符串的RLE压缩的测试程序
  3. 菜单自定义图标_操作系统任务栏了解多少,Windows server 2008 R2自定义通知区域...
  4. c语言中的素数定理,素数定理
  5. 各种机器学习和深度学习的中文微博情感分析
  6. SVM中的核函数什么意思
  7. python打开浏览器全屏_python 打开浏览器的两种方式
  8. Redis 的操作为什么是的原子性的详解
  9. Mqtt客户端与服务端通讯
  10. H3C交换机s5500Web登录配置
  11. 计算机网络第5版答案完整版
  12. 用串口控制SIM900A打电话和发短信,遇到的一些问题总结。
  13. STM8S系列学习第一周目:1.用STVD组建第一个项目创建工程
  14. 关于java8 List转map 分组顺序重排问题
  15. Python可视化 | 风玫瑰图可视化示例
  16. 1.3中国计算机网络发展情况
  17. 陆港澳台正则 + 陆港澳台身份证+回乡证+台胞证+护照正则表达式,及 根据身份证号码,获取性别、获取生日、计算年龄、获取地址、获取生肖、获取星座...
  18. proftpd ldap mysql_在debian linux安装proftpd
  19. 中国人民大学计算机专硕好考吗,干货:中国人民大学考研复试成功经验分享,值得收藏!...
  20. 如何在编译时判断是否支持SSE/SSE2/AVX/AVX2/AVX-512

热门文章

  1. get() got an unexpected keyword argument
  2. python 中的魔法类
  3. 一次历时两周的实习生笔试
  4. iOS 不规则的ImageView
  5. java系统排序_java各种排序实现
  6. 安装RabbitMQ无法访问(http://localhost:15672)解决方案
  7. Spring Cloud Alibaba Nacos集群和持久化配置
  8. Docker批量拉取和推送的Linux Shell脚本
  9. 并发编程学习之ConcurrentHashMap扩容机制
  10. 软件设计原则(一) 单一职责原则