zoukankan      html  css  js  c++  java
  • 抽象类和接口对比

    抽象类相关

    抽象类:又叫抽象基类:在定义的时候使用 abstract 关键字标记的普通类。他可包含一般类所包含的所具有的特性,例如字段,属性,方法,另外还包含一个很特殊的方法,叫抽象方法(没有实现的方法,而派生于该类的类就必须实现该方法),而且不能被实例化,主要用在类的定义和部分实现等方面。

    接下来我们先看下抽象类和抽象方法在使用需要注意的地方:

    1,抽象类需要用abstract关键字标记

    2,抽象方法不能有任何的方法实现(连{}都不能有)

    3,抽象成员必须包含在(隶属于)抽象类中。

    4,由于抽象成员没有任何实现,所以子类必须将抽象成员重写。

    5.抽象类不能实例化,所以抽象类的存在就是为了让子类继承。

    6,抽象类中既可以包括抽象成员,也可以包括具有代码实现的成员。,

    7,抽象方法不能用static修饰。

    看过了抽象类和抽象方法后,我们接着来看下与接口相关的内容

    接口相关:

    接口:接口是一种特殊的抽象类,用interface关键字来标记接口类型,它可以包含实例/静态方法,任何实现该接口的类就必须按照接口的定义实现这些方法。

    下面我们来看下使用接口要注意哪些地方:

    1, 接口是一种规范,为了实现多态而存在

    2, 接口不能被实例化

    3, 接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改(默认为public)

    4, 接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)

    5, 接口中只能有方法、属性、所引器和事件,不能有“字段”

    6, 接口与接口之间可以继承,并且可以多继承

    7, 实现接口的子类必须实现该接口的全部成员。

    8, 一个类可以同时继承一个类并实现多个接口,如果一个类同时继承了父类A,并且实现了接口IA,那么语法上A必须写在IA的前面。Class Test:A,IA{},因为类是单继承的。

    9, 当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract

    10, 显示实现接口,只能通过接口变量来调用(因为显示实现接口后成员为private)

    看过了抽象类和接口各自的特点后,下面我们就来看下抽象类和接口的区别:

    第一:接口定义类的公共行为,抽象类定义类的公共实现

    第二:一个类只能继承自一个类(抽象类),但是可以同时实现多个接口

    第三:接口中不能有实现,抽象类中既可以有未实现的成员,也可以有实现的成员

    第四:接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写

    第五:好的接口定义应该是具有专一功能性的,而不是多功能的,否则会造成接口污染。如果一个类只是实现了这个接口中的一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

    看过了抽象类和接口的区别后,我们接着来看下抽象类和接口的应用场合。

    什么时候使用抽象类,什么时候使用接口?

    首先我们强调下:抽象类主要用于关系密切的对象;而且接口适合为不相关的类提供通用功能。

    例如:飞机会飞,鸟也会飞,他们都继承了同一个接口”飞”;但是“波音747”属于飞机抽象类,大雁属于鸟抽象类。

    最后用一张简单的表格对两者进行一个对比:

  • 相关阅读:
    现代软件工程 第一章 概论 第3题——韩婧
    现代软件工程 第一章 概论 第2题——韩婧
    小组成员邓琨、白文俊、张星星、韩婧
    UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
    UVa 10780 幂和阶乘 求n!中某个因子的个数
    UVa 11859 除法游戏(Nim游戏,质因子)
    Codeforces 703C Chris and Road 二分、思考
    Codeforces 703D Mishka and Interesting sum 树状数组
    hdu 5795 A Simple Nim SG函数(多校)
    hdu 5793 A Boring Question 推公式(多校)
  • 原文地址:https://www.cnblogs.com/nofliu/p/2958893.html
Copyright © 2011-2022 走看看