接口(interface)与抽象类(abstract class)两者的异同
首先说明一下,JDK1.8以后接口可以有默认方法和静态方法以及私有方法。
一、概念:
接口(interface):是抽象类的变体,其中所有的方法都是抽象的且不能有方法体,而且只能定义 static final 成员变量。例如:public static final int MAX_VALUE = 0x7fffffff;
抽象类(abstract class):声明方法的存在但不去实现它的类叫做抽象类。抽象类中可以有实现了的方法,也可以没有实现了的方法;抽象类中可以没有抽象的方法,但有抽象方法的类一定是抽象类。抽象类与普通类最大的区别是它不能被直接实例化,只能通过子类间接实例化。
二、区别
1.两者的共同点:
(1)两者都是抽象类,都不能被实例化。
(2) interface实现类及abstract class的子类都必须要实现已经声明的抽象方法。
2.两者的不同点:
(1)一个类可以实现(implements)多个interface,但一个类只能继承(extends)一个abstract class。
(2)interface强调特定功能的实现,具有哪些功能,而abstract class强调所属关系。
(3)尽管interface实现类及abstract class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现(只实现其中的抽象方法,覆盖其中已实现了的方法,二者均实现)。
(4)interface是完全抽象的,只能声明方法,而且只能声明public的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。
三、为什么Java中采用多接口而没有多继承???
接口只定义了你做什么,而不关心你怎么做;
如果是多继承,有可能两个类定义的两个方法是做同一件事情的,那么他们的子类就无法选择到底去用哪一个。
接口(interface)与抽象类(abstract class)两者的异同的更多相关文章
- C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较
由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...
- PHP接口(interface)和抽象类(abstract)
interface 定义了一个接口类,它里面的方法其子类必须实现.接口是类的一个模板,其子类必须实现接口中定义的所有方法. interface User{ function getHeight ...
- PHP的接口类(interface)和抽象类(abstract)的区别
<?php /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么 ...
- JAVA的abstract修饰符 && 接口interface用法 && 抽象类和interface的差别
abstract修饰符可以修饰类和方法. (1)abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型(见后面实例),也就是编译时类型.抽象类就相当于 ...
- php中的抽象类(abstract class)和接口(interface)
一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来 ...
- PHP中的特殊类,接口类和抽象类(都不能直接实例化)
接口类不用实例化,需要一一实现接口定义的所有方法.关键字interface implements 接口interface 是一个规定,给人继承用的东西,有点像抽象类在里面定义的方法,却不去实例化,而需 ...
- java中的接口interface
关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...
- C# 抽象类abstract
不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例,有未被实现的方法.抽象类不可以new对象. "一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被 ...
- Java SE 第二十二讲----接口interface
1.接口:interface:接口的地位等同于class,接口中的所有方法都是抽象方法.在声明接口中的方法的时候,可以使用abstract关键字也可以不使用.通常情况下,都会省略掉abstract关键 ...
随机推荐
- design PLL
PLL PLL主要是NCO中通过相位比较器,控制压控振荡器,控制频率.
- Linux 下 Git版本升级
一.下载需要安装的版本号 wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.24.0.tar.gz 二.安装需求 yum ...
- 攻防世界之Web_upload1
题目: 本题考查的是文件上传漏洞. 上传一句话木马. 桌面新建一个webshell.php文本文件,写入<?php @eval($_POST['pass']);?>保存. 点击浏览,选择 ...
- CobaltStrike逆向学习系列(12):RDI 任务发布流程分析
这是[信安成长计划]的第 12 篇文章 0x00 目录 0x01 任务构建 0x02 结果处理 0x03 功能 DLL 分析 之前的分析都是针对整个 CS 的框架来进行的,但是功能也是整个 C2 中相 ...
- schtasks
schtasks create 创建新的计划任务. 语法 schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier ...
- Clickhouse 分布式表&本地表 &ClickHouse实现时序数据管理和挖掘
一.CK 分布式表和本地表 (1)CK是一个纯列式存储的数据库,一个列就是硬盘上的一个或多个文件(多个分区有多个文件),关于列式存储这里就不展开了,总之列存对于分析来讲好处更大,因为每个列单独存储,所 ...
- Smartbi扩展性怎么样,是否方便扩展开发产品已有功能?
Smartbi大数据分析工具具有很强的扩展性,通过"稳定内核+API扩展"的架构,通过报表插件扩展的方式,能满足很多应用项目的定制化需求,把新功能无缝集成到系统中. Smartbi ...
- RESTful风格了解
最近在学习springboot,一直听到一个词叫RESTful风格,今天找了一下书了解了一番.spring mvc除了支持json数据交互外,还支持RESTful风格 RESTful也称为REST(r ...
- c# 编程学习(三)
方法是具名的语句序列 returnType methodName ( parameterList ) { // 这里添加方法主体语句 } returnType(返回类型)是类型名称,指定方法返回的数 ...
- 动态语言运行时(DLR)
前言 为了让C#.Visual Basic等.NET编程语言能具备动态编程语言的特性,.NET 4.0引入了一个"DLR(Dynamic Language Runtime:动态语言运行时)& ...