java — 抽象类和接口
老生常谈的一个概念,很明确,不过我们多从几个角度来看下应该会有更好的理解,最近翻了下java8的某些新特性
关于接口的新特性让笔者受惊了,下面结合下做个总结,有更新的话直接在这里更新。
设计层面讲:
1、抽象类类比模板,继承父类的子类们,你们至少都有了父亲的基因,还可以自己扩张,发展自己的个性
接口更像是一种协议(约定),实现接口的子类都有自己的具体实现,但是都得遵守这个约定,譬如入参,返回等等
2、抽象类表示一种A是B的关系;接口表示的是一种A有B的行为,书中最常用的描述,is-a 和 like-a的关系
语法层面:
1、抽象类的成员变量可以是多种类型,接口的成员变量都是public static final的
因此开发中常常会写一个interface把一些常量丢进去,顺便说一句,static代表只有一份,final才代表常量
什么意思呢?static意思是说这个东西是属于类的,而不是属于类的实例的,
final修饰的,在编译期就会丢进这个类的常量池。关于class文件的组成以及类的加载在《深入理解java虚拟机》中讲的
非常细致,有时间我也写一篇总结下
2、抽象类可以有方法的实现,接口中只能有抽象方法(默认public abstract)
且慢,且慢,笔者最近看的java8的新特性,感觉世界没有秩序了,java也不再有秩序,因为新特性说了,接口中也能有
方法的实现了,只要加一个default方法签名,叫默认方法,实现类可以默认继承,也可以覆盖掉。
3、抽象类中允许有静态代码块和静态方法,接口不能
看到上面一条的java8"例外",你可能又要注意了,新特性还说加了static修饰的方法,实现类都不用实现了。问题来了,
如果两个接口都有相同的static方法,现在一个类同时去实现这2个接口,那么这个类该去"继承"谁呢?太乱了。笔者的工作
中,目前还不敢着手这些新特性。
4、一个类只能继承一个抽象类(单继承),但可以实现多个接口(多继承)
这个没啥说的
java — 抽象类和接口的更多相关文章
- java抽象类与接口的区别及用法
java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...
- Java 抽象类与接口总结
一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法 含有抽 ...
- JAVA抽象类和接口的深入探讨
Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...
- 第十八节:详解Java抽象类和接口的区别
前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...
- Java抽象类和接口的比较
一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...
- java抽象类与接口区别
java抽象类与接口区别: abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstr ...
- Java抽象类和接口的区别(好长时间没看这种文章了)
Java抽象类和接口的区别(好长时间没看这种文章了) abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的 ...
- Java 抽象类和接口的理解
Java 抽象类和接口的理解 一.抽象类 为什么使用抽象类(个人理解): 面向对象的概念是,我们知道的所有的对象都是通过类来描绘的,如果类包含的信息不能描绘一个具体的对象,就需要抽象来解决了,意思是一 ...
- 记录:JAVA抽象类、接口、多态
JAVA抽象类.接口.多态 1. 多态 定义 多态是同一个行为具有多个不同表现形式或形态的能力.(多态就是同一个接口,使用不同的实例而执行不同操作) 如何实现多态 继承和接口 父类和接口类型的变量赋值 ...
- Java——抽象类与接口的前世今生
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 1.抽象类: 当编写 ...
随机推荐
- 不同JDK版本之间的intern()方法的区别-JDK6 VS JDK6+
String s = new Stirng(“a”); s.intern(); JDK6:当调用intern()方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该字符串的引用.否则,将此 ...
- rtsp+rtmp多路流媒体播放
一.前言 之前博主有写过 一篇博文,讲的是使用videojs在谷歌浏览器网页上播放rtmp流媒体,具体可参考我之前的博客:https://www.cnblogs.com/FHC1994/p/99814 ...
- JAVA API about HTTP 2
import java.io.IOException; import java.nio.charset.Charset; import java.security.KeyManagementExcep ...
- META标签的定义与使用(二、页面描述信息(NAME))
二.name的content指定实际内容.如:如果指定level(等级)为value(值),则Content可能是beginner(初级).intermediate(中级).advanced(高级). ...
- PokerNet-poker recognition: 基于人工神经网络的扑克识别 (5)
结果解读 结果1 结果2 结果1 void computeBCValue(cv::Mat mat_img, std::vector<bbox_t> result_vec, std::vec ...
- 使用navicat 使用IP、用户名、密码直接连接linux服务器里面的数据库
一般新申请的服务器,没有开通3306端口的吧,反正我遇到的,要用Navicat去连接linux下的数据库,都必须填写两个地方的信息,才能链接成功. 如果想要只通过填写ip还有数据库用户名还有密码就可以 ...
- CSIC_716_20191107【深拷贝、文件的编码解码、文件的打开模式】
深拷贝和浅拷贝 列表的拷贝,用copy方法浅拷贝,新列表和被拷贝列表的id是不一样的. list1 = [1, 'ss', (5, 6), ['p', 'w','M'], {'key1': 'valu ...
- Python 读取本地*.txt文件 替换 内容 并保存
# r 以只读的方式打开文件,文件的描述符放在文件的开头# w 打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建新文件 #路径path = r"D:\pytho ...
- day34 反射、面向对象内置方法:如__str__、面向对象的软件开发
Python之路,Day21 = 反射.面向对象内置方法:如__str__.面向对象的软件开发 几个内置查看的方法使用 .__base__ 查看类的继承结构.mro() 对象找属性的顺序存在里面 -- ...
- iOS中消息的传递机制
本文中,会经常提及接收者[recipient]和发送者[sender].在消息传递机制中具体是什么意思,我们可以通过一个示例来解释:一个table view是发送者,而它的delegate就是接收者. ...