[drp 6]接口和抽象类的区别,及其应用场景
导读:在很多时候,接口和抽象类可以替换。发现这个问题,还是之前学习设计模式的时候,看到那个UML图发现的。那么,究竟在什么时候使用接口,什么时候使用抽象类呢?现在结合这个项目,做一个总结。
一、接口
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
特点:
Java接口的方法只能是抽象的和公开的,Java接口可以有public、静态的和final属性
接口没有构造方法,不能被实例化
接口不能实现另一个接口,但可以继承多个接口
一个类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则,这个类应该被定义为抽象类
二、抽象类
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。在java中,含有抽象方法的类称为抽象类,不能生成对象。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。
特点:
抽象类中可以有一般的变量和一般的方法
子类继承抽象类必须实现其中抽象方法,除非子类为抽象类
抽象方法必须存在于抽象类中
如果一个声明一个类为abstract,那么此类不能生存对象,只能被继承使用
三、区别
联系:
1,都不能被实例化
2,都包含有未实现的方法声明
区别:
1,抽象类里面可以有构造方法,而接口不能。
2,抽象类中可以有普通的方法,而接口中不能有方法的实现。
3,抽象类的访问类型可以是public,protected。但接口中只能是public,而且默认为public。
4,一个类可以实现多个接口,但只能继承一个抽象类。
四、总结
接口和抽象类,都是一种面向对象的体现。在抽象的基础上,一个体现了继承、一个体现了多态。那么,抽象类,主要用来进行类型隐藏,构造出一个固定的一组行为的抽象。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点。
一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。
面向接口编程,而不要面向具体编程!
[drp 6]接口和抽象类的区别,及其应用场景的更多相关文章
- android中接口和抽象类的区别
最近发现很多基础有点生疏了,特地写一点博客来巩固一下.今天主要来谈谈接口和抽象类的区别,我们在项目的很多地方都会用到接口或者抽象类,但是它们之间的一些区别和相同点不知道大家有没有注意到,还有就是,什么 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- java 接口和抽象类的区别
java 接口和抽象类的区别抽象类:1.含有抽象方法的类一定为抽象类,反过来抽象类,不一定含有抽象方法:2.抽象类必须用abstract来进行定义,抽象方法也必须用abstract来进行定义:3.抽象 ...
- java接口和抽象类的区别和作用(功能、用途、好处)
Java接口: 总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋 ...
- 【Java知识点专项练习】之 接口和抽象类的区别
接口和抽象类的区别 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的.接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为publi ...
- C#中接口与抽象类的区别
接口与抽象类是面试中经常会考到的点,容易混淆.首先了解下两者的概念: 一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类 ...
- java中的接口和抽象类的区别
1.接口从用户的角度(使用实现的代码)看问题. 2.接口由编译器强制的一个模块间协作的合约. 3.无成员变量. 4.成员函数只能声明不能实现,(jdk1.8中的default 方法可以有方法体). 接 ...
- 《Java基础知识》Java接口和抽象类的区别
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
- Java中接口和抽象类的区别?
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
随机推荐
- 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性
<? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...
- 黄聪:wordpress如何使用wp_rewrite实现自定义伪静态,非301重定向。
今天,想通过wordpress实现 http://hcsem.com/a?h-1 伪静态为 http://hcsem.com/a-1.html 找了很多资料,终于搞定. 只需要在functions.p ...
- What is a Windows USB device path and how is it formatted?
http://community.silabs.com/t5/Interface-Knowledge-Base/Windows-USB-Device-Path/ta-p/114059 Windows ...
- Kmeans算法学习与SparkMlLib Kmeans算法尝试
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的 ...
- OAF_MDS系列1_OAF页面元数据结构MDS的解析(概念)
2014-06-06 Created By BaoXinjian
- 转-Android客户端和服务端如何使用Token和Session
http://www.software8.co/wzjs/yidongkaifa/6407.html 对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不 ...
- error-iis-Service Unavailable
Service Unavailable Service Unavailable HTTP Error 503. The service is unavailable.
- Jetty服务器jmx监控
Jetty服务器jmx监控 Jetty 服务器增加jmx,jmx-remote模块 1.修改对应jetty服务器的配置文件start.ini追加如下两行–module=jmx–module=jmx-r ...
- REDHAT6.2配置yum源(64位)(转载)
From:http://www.dedecms8.com/db/php_bc/12322.html 1.删除redhat原有的yum rpm -aq|grep yum|xargs rpm -e --n ...
- [ActionScript 3.0] AS3.0 调试出现安全沙箱冲突错误解决办法
提示 *** 安全沙箱冲突 ***到 http://api.map.baidu.com/telematics/v3/weather?location=%E6%88%90%E9%83%BD&ou ...