一.接口基本概念

(1)接口:是把公共方法和属性组合起来,以封装特定功能的一个集合。创建接口时,一般一大写的I开头,接口中的成员都是公有的。

接口定义如下:

 interface IClown  //写一个接口和写一个类类似,只是不用写具体方法实现
{
string FunnyThingHave { get; }

//只需要定义方法的返回值和参数,然后不用写用大括号括起来的语句,只写一个分号就可以了
void Honk(string name);
}

①利用接口,可以定义一个类必须有的一组方法(实现接口的类必须包含接口中定义的所有方法和属性)

           ②接口不能实例化(ITest test=new ITest() 是错误的),但是可以创建他的引用(如 ITest test是可以);

           ③ 接口不存储数据,所以不能增加任何字段,不过可以增加属性,因为get 和set 访问器是一种特殊类型的方法,接口就是要求类去实现包含有特殊名字、类型和参数的方法。(所以遇到在接口中增加字段就能解决的问题,可以使用属性来达到目的。)

           ④接口并不是用来避免重复的代码的,它的作用是使得一个类可以做不止一种工作而无需继承,因为继承会带来很多额外的负担:你必须继承每一个方法、属性和字段,而不只是处理特定任务有关的那些成员

           ⑤可以用is 关键字来检查一个类是否实现了某个接口

           ⑥某个类可以实现多个接口,但只能派生(继承)于一个基类,用冒号操作符实现接口,冒号后首先是基类,后面是一组接口(除非这个类没有继承任何类,在这种情况下,冒号后面只有一组接口,各个接口没有特定的顺序)

二.抽象类基本概念

    • 用 abstract 关键字修饰的类叫抽象类,用 abstarct 修饰的方法叫抽象方法。
    • 抽象类可以定义属性
    • 可以有抽象方法(抽象方法必须在抽象类中)------抽象方法只有方法声明,没有方法体,继承该抽象类(接口)的非抽象自雷必须实现该抽象方法
    • 可以有非抽象方法
    • 抽象类可以定义构造器,但本身不能实例化,只能实例化该抽象类的实现类

抽象类中怎么确定方法是需要用虚方法还是抽象方法?

    • 当不需要用父类中的实现时,将其定义为抽象方法(实现类自行写自己的实现过程)
    • 当实现的方法多数都一样,少数不一样时,将方法以虚拟方法形式写在父类,在少数不一样的过程中重写方法

三.接口和抽象类比较

相同点:

    • 都可以被继承
    • 都不能实例化

不同点

    • 抽象类是一个不完整的类,需要进一步细化;而接口只是一个行为上的规范。
    • 抽像基类不能实现多继承,而接口可以实现多继承。
    • 抽象基类可以实现定义字段、属性、包含有实现的方法。接口可以定义属性、方法但不能包含方法的实现

 四.何时使用接口?何时使用抽象类?

  • 如下情况时使用接口:

①个性大于共性

②差异较大的个性间具有某些相同的行为

③相同行为的实现方式有较大差别

  • 如下情况时使用抽象类:

①共性大于个性

②共性相同的个体间必然有相同的属性与行为

③相同行为的实现方式有一定区别

1.当在差异较大的对象间寻求功能上的共性时,使用接口。

2.当在共性较多的对象间寻求功能上的差异时,使用抽象基类

参考资料:(33条消息) 抽象基类与接口,共性与个性的选择!_weixin_34008933的博客-CSDN博客

抽象类、父类、接口_**Dragon**的博客-CSDN博客

C#.NET系列●接口抽象类的更多相关文章

  1. java 接口 继承 接口 抽象类 继承 实体类

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 接口 可以 继承 接口 抽象类 可以 实现 接口 抽象类 继承实体类 需要 实体类 有 ...

  2. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

    接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 答:接口可以继承接口.抽象类可以实现(implements)接口,抽象类 ...

  3. OpenJDK源码研究笔记(十四):三种经典的设计方法,接口,接口-抽象类-具体实现类,接口-具体实现类

    在研究OpenJDK源码过程中,我发现常用的设计方法就是2种:接口,接口-抽象类-具体实现类 . 在一些其它开源框架和业务开发中,经常存在着第3种设计,接口-具体实现类. 1.只有接口,没有实现类. ...

  4. Java基础系列--06_抽象类与接口概述

    抽象类 (1)如果多个类中存在相同的方法声明,而方法体不一样,我们就可以只提取方法声明. 如果一个方法只有方法声明,没有方法体,那么这个方法必须用抽象修饰. 而一个类中如果有抽象方法,这个类必须定义为 ...

  5. 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

    JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM, ...

  6. Java接口,抽象类

    1.接口(interface),接口被用来建立类与类之间关联的标准. 2.抽象类(abstract class),只要类中有一个抽象方法,此类就被标记为抽象类.实际上抽象类除了被继承之外没有任何意义. ...

  7. PHP - 接口&抽象类

    什么时候使用抽象类什么时候使用接口? .如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类.如果要创建将由一些不相关对象采用的功能,就使用接口. .如果必须从多个来源继承行为,就 ...

  8. Java 接口-抽象类解析

    对于面向对象编程,抽象是它的三大特征(抽象.继承.多态)之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类. 这两者既相似又存异.诸位在初学的时候也会傻傻分不清接口与抽象类的区别,大 ...

  9. PHP对象和接口抽象类注意事项

    Php 的对象的实现: 注:对象名称最好以对象名.class.php来进行命名. 1. 对于静态类的成员不能使用$this->这个来调用其静态类的成员和函数,应该使用self::成员或者方法来进 ...

  10. 面向对象php 接口 抽象类

    1.定义类和实例化对象: 使用关键字class定义类,使用new实例化对象: 2.类成员的添加和访问: 类成员:有属性,方法,常量(常量名不带$符): 访问属性的时候,变量名不带$符 添加属性需要使用 ...

随机推荐

  1. APP学习4

    1.Toast Toast是Android系统提供的轻量级信息提醒制度,用于向用户提示即时信息,它显示在引用程序界面的最上层,显示一段时间后自动消失,不会打断当前操作,也不获得焦点. Toast.ma ...

  2. 解决sqlplus中方向键和退格键乱码问题

    centos7 1.安装rlwrap软件包 yum install rlwrap -y 2.编辑环境变量 su - oracle vim ~/.bash_profile alias sqlplus=' ...

  3. 微信小程序JS遇到【object object 】怎么打印?js如何打印object对象

    console.log(JSON.stringify(user)):或者打印的时候直接 console.log(user):不要出现'""'+这些符号

  4. iOS笔记 - Runtime 01:前期准备(isa结构 | Class结构 | 方法缓存)

    前言 1 - OC机制很多都是基于 Runtime实现的,比如指针的弱引用.OC的消息机制属于 Runtime的一部分 2 - OC是一门动态语言,在程序运行过程中就可以修改已经编译好的代码 3 -  ...

  5. List集合增删元素时,UnsupportedOperationException报错问题

    我的情况是这样:从数组转集合,操作集合删除元素. // Tab页面标题第一步:String[] mTitles = getResources().getStringArray(R.array.lead ...

  6. vi 快捷键/ctags

    vi 配置 syntax enableset nu set relativenumberset hlsearch set autoindentset shiftwidth=4set tabstop=4 ...

  7. Java常用数据结构

    1.数组 数组(Array) 是一种很常见的数据结构.它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储. 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址 ...

  8. hibernate的校验

    //不使用@valid进行校验Set<ConstraintViolation<CommonValidator>> validates = validator.validateV ...

  9. <<运算?&=、|=、 ^=、<<=、>>=的意思? 十六进制前缀是 0x。

    <<运算? a<<b 表示把a转为二进制后左移b位(在后面添加 b个0).例如100的二进制表示为1100100,100左移2位后(后面加2个零):1100100<< ...

  10. surfaceview+mediaplayer

    public class VideosurfaceView extends SurfaceView implements SurfaceHolder.Callback, MediaPlayer.OnP ...