java编程思想第九章接口
9.1抽象类和抽象方法
为什么要有抽象类?
是希望通过通用接口操作一系列类。
那么抽象类的形式是什么样的呢?
声明类的使用使用abstract关键字,且在该类中应该具有抽象方法。
注:抽象方法被关键字abstract方法修饰。
编译器会禁止我们对抽象类进行实例化。
9.2接口
接口是对抽象类更进一步的抽象。
接口声明时使用interface关键字,接口中的域都是隐式添加关键字:public static与final。
接口想被导出类实现需要通过关键字implement来完成。
接口中的方法是被默认定义为public abstract的。
9.3完全解耦
使用策略模式,适配器模式,代理模式完成完全解耦。
9.4多重继承
接口与接口之间是可以通过多重继承来提升接口的功能的。
9.5通过继承来扩展接口
在使用继承扩展接口时,请避免将不同接口中的名字定义为一样的。这样会导致编译异常。
9.6适配接口
通过适配器模式将类与接口进行适配。
9.7接口中的域
接口中的域默认都是public static final的。
9.8嵌套接口
在实现接口时,并不需要实现嵌套在其内部的任何接口
9.9接口与工厂
通过工厂模式来创建接口的实现对象。
提供一些复用的机制。
总结:
实际上工作中,接口是否存在滥用的情况吗(指service与dao层的接口)?
目前来说还是看不到的,或许自己对框架的理解不够深刻?
但是通过接口来提供模板是一种很好的实现方式。也是一种很好的编程思路。
除此之外,在项目中间接口的使用还是相对较少的。
还是需要累积更多经验,要多思考啊!
抽象类与普通类的区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类无法实现该方法,)缺省情况下默认为public。
2)抽象类不能够用来创建对象。
3)如果一个类继承抽象类,则必须实现父类的抽象方法;否则的话,子类也必须定义为abstract类。
接口:
1)接口中的变量会隐式地指定为public static final变量。
2)非抽象类实现接口必须重写接口中的方法;若是抽象类,可以不实现该接口中的抽象方法。
抽象类与接口的区别:
1)语法层面的区别:
a)抽象类可以提供成员方法的实现,而接口中只能存在public abstract方法。
b)抽象类中的成员变量是可以是各种类型的,而接口中的成员变量只能是public static final类型的。(这里使用成员变量这个词,实际上应该使用类变量,因为这里用到了static这个关键字)。
c)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块与静态方法。
d)一个类只能继承一个抽象类,而一个类可以实现多个接口。
2)设计层面来说:
抽象类是对事物的一种抽象,即对类的抽象。接口是一种行为的抽象。
继承抽象类,对子类来说,是一种“是不是”的关系。(即是不是某一种类事物,鸟类为抽象基类的话,乌鸦是鸟类,鸽子也是鸟类)。
实现接口,对于子类来说,是一种“能不能”的关系。(飞行是一个接口,飞机和乌鸦都实现这个接口,实现飞翔的能力)。
本文参考:java编程思想中文版第四版。
java编程思想第九章接口的更多相关文章
- Java编程思想 第九章 接口
第九章 接口 抽象类和抽象方法 抽象:从具体事物抽出.概括出它们共同的方面.本质属性与关系等,而将个别的.非本质的方面.属性与关系舍弃,这种思维过程,称为抽象. 这句话概括了抽象的概念,而在Java中 ...
- [Java编程思想] 第一章 对象导论
第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...
- Java编程思想学习笔记——接口
1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽 ...
- Java编程思想之九 接口
接口和内部为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类和抽象方法 创建一个抽象类是希望通过这个通用接口操纵一系列类. Java提供了一个叫做抽象方法的机制,这种方法是不完整的:仅声明而 ...
- [Java编程思想] 第二章 一切都是对象
第二章 一切都是对象 2.1 用引用操纵对象 创建一个String引用: String s; 这里所创建的只是引用,并不是对象. 创建一个引用的同时便初始化: String s = &qu ...
- JAVA 编程思想第一章习题
//: ch1.01/IntChar.java package object; import java.util.*; public class IntChar { int x; char y; pu ...
- 学习java编程思想 第一章 对象导论
一.面向对象的五个基本特性: 1.万物皆为对象.将对象视为奇特的变量,他可以存储数据,还可以要求它在自身上执行操作. 2.程序是对象的合集,他们通过发送消息告诉彼此所要做的. 3.每个对象都有自己的由 ...
- JAVA编程思想第一章——对象导论
- JAVA编程思想第二章答案
欢迎访问我的CSDN博客查看https://mp.csdn.net/mdeditor/94797839# 有其他问题欢迎发送邮箱至hpzhangjunjiell@163.com 感谢
随机推荐
- Django-虚拟环境设置
Django 虚拟环境virtualenv virtualenv是用来处理多个用python语言进行开发的项目,在同一台机器上部署,不同项目依赖不同第三方库版本所造成的问题. 打个比方,现在你机器上要 ...
- Shell编程之IF条件
一.if条件语句的知识与实践 1.if条件语句语法(单分支结构) 第一种: if < 条件表达式 > then 指令 fi 第二种: if < 条件表达式 >; then 指令 ...
- Hearbeat + Nginx 安装配置
Hearbeat + Nginx 安装配置 实验环境 两台主机:Linux Centos 6.5 32位 主 服务端:Hearbeat + Nginx eth0:192.168.1.160(公网) e ...
- 如何判断Linux服务器是否被入侵?
被入侵服务器的症状 当服务器被没有经验攻击者或者自动攻击程序入侵了的话,他们往往会消耗 100% 的资源.他们可能消耗 CPU 资源来进行数字货币的采矿或者发送垃圾邮件,也可能消耗带宽来发动 DoS ...
- Solr 报错:java.lang.NoClassDefFoundError: org/apache/http/entity/mime/content/ContentBody
HBase协处理器中使用Solr时报错,如下 2018-07-11 17:06:14,054 INFO [LruBlockCacheStatsExecutor] hfile.LruBlockCache ...
- 0.00-050613_ZC_Chapter4_20151230
1. 32位 保护模式 段选择符 --> 段描述符(段描述符表) --> 段基地址 + 偏移量 ==> 线性地址(ZC: 这个地址就是段的开始地址) 1.2. 段限长字段LIMIT ...
- C# 实现WinForm窗口最小化到系统托盘代码
1.如果不想让程序在任务栏中显示,请把窗体的属性ShowInTaskbar设置为false; 2.如果想让程序启动时就最小化,请设置窗体的属性WindowState设置为Minimized.(Mini ...
- JAVA设计模式初探之组合模式
先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性.” 就拿剪发办卡的事情来分析一下吧. 首先,一张卡可以在总部,分店, ...
- 智课雅思词汇---十八、前缀peri是什么意思
智课雅思词汇---十八.前缀peri是什么意思 一.总结 一句话总结:前缀:peri- 表示“周围, 靠近” 词根:-peri- [词根含义]:试验,尝试 [词根来源]:英语experience, e ...
- spring boot: 线程池ThreadPoolTaskExecutor, 多线程
由于项目里需要用到线程池来提高处理速度,记录一下spring的taskExecutor执行器来实现线程池. ThreadPoolTaskExecutor的配置在网上找了很多解释没找到,看了下Threa ...