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编程思想第九章接口的更多相关文章

  1. Java编程思想 第九章 接口

    第九章 接口 抽象类和抽象方法 抽象:从具体事物抽出.概括出它们共同的方面.本质属性与关系等,而将个别的.非本质的方面.属性与关系舍弃,这种思维过程,称为抽象. 这句话概括了抽象的概念,而在Java中 ...

  2. [Java编程思想] 第一章 对象导论

    第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...

  3. Java编程思想学习笔记——接口

    1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽 ...

  4. Java编程思想之九 接口

    接口和内部为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类和抽象方法 创建一个抽象类是希望通过这个通用接口操纵一系列类. Java提供了一个叫做抽象方法的机制,这种方法是不完整的:仅声明而 ...

  5. [Java编程思想] 第二章 一切都是对象

    第二章 一切都是对象 2.1 用引用操纵对象   创建一个String引用: String s;   这里所创建的只是引用,并不是对象.   创建一个引用的同时便初始化: String s = &qu ...

  6. JAVA 编程思想第一章习题

    //: ch1.01/IntChar.java package object; import java.util.*; public class IntChar { int x; char y; pu ...

  7. 学习java编程思想 第一章 对象导论

    一.面向对象的五个基本特性: 1.万物皆为对象.将对象视为奇特的变量,他可以存储数据,还可以要求它在自身上执行操作. 2.程序是对象的合集,他们通过发送消息告诉彼此所要做的. 3.每个对象都有自己的由 ...

  8. JAVA编程思想第一章——对象导论

  9. JAVA编程思想第二章答案

    欢迎访问我的CSDN博客查看https://mp.csdn.net/mdeditor/94797839# 有其他问题欢迎发送邮箱至hpzhangjunjiell@163.com 感谢

随机推荐

  1. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  2. Vue.js学习笔记 第四篇 列表渲染

    遍历数组和对象 和条件选择一样,循环也和其他语言类似,也尝试着用一个例子解决问题 <!DOCTYPE html> <html> <head> <meta ch ...

  3. 搭建本地yum源服务器

    搭建本地yum源服务器   好久没写博客了,最近比较动荡,临毕业时跳了个槽,感觉之前做的金融方向的运维不是很适合我,对各方面的限制还是太多.金融的IT对于安全似乎要求很高,云盘,U盘都不能用,还要经常 ...

  4. Kafka详解一:Kafka简介

    问题导读 1.Kafka有何特性?2.Kafka有哪些组件? 背景:     当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: ...

  5. Codeforces 870E Points, Lines and Ready-made Titles:并查集【两个属性二选一】

    题目链接:http://codeforces.com/problemset/problem/870/E 题意: 给出平面坐标系上的n个点. 对于每个点,你可以画一条经过这个点的横线或竖线或什么都不画. ...

  6. 添加语句<tx:annotation-driven transaction-manager="txManager"/>报错

    在添加<tx:annotation-driven transaction-manager="txManager"/>程序之前,applicationContext.xm ...

  7. java对象流(一)

    注意:字节数组流是可以不用关闭的(字符数组流要不要关闭暂时不清楚). 对象流的读数据和写数据方法分别是writeObject(Object o)和readObject(Object o). Objec ...

  8. The import javax.servlet.jsp.JspWriter cannot be resolved' error

    Add servlet-api.jar and jsp-api.jar from Tomcat 6.0 library to ecipse project.

  9. web自动化:selenium原理和元素定位(一)

    一. Selenium2 WebDriver 当Selenium2.x提出了WebDriver的概念后,它提供了完全另外的一种方式与浏览器交互 那就是利用浏览器原生的API,封装成一套更加面向对象的S ...

  10. 《Advanced Bash-scripting Guide》学习(八):从一个目录移动整个目录树到另一个目录

    本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 ABS书上的例子: 从一个目录移动整个目录树到另一个目录 #!/bin/bash ...