Java编程思想学习笔记——接口
1.抽象类和抽象方法
抽象方法:不完整的,仅有声明而没有方法体。
abstract void f();
抽象类:包含抽象方法的类。(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的。)
1.用抽象类直接创建对象是不安全的,因为这个抽象类是不完整的。编译器通过这种方式保证了
抽象类的纯粹性。
public abstract class Person {
public abstract void eat();
public abstract void pee();
public abstract void sleep();
}
//不能直接用抽象类创建对象
//Person p = new Person();//错误
2.一个类从抽象类中继承,若想创建改类的对象,就必须实现基类中的所有抽象方法。否则将无法创建该类的对象,
并且导出类也是抽象类。
//一个类继承自抽象类,必须实现这个抽象类中的所有抽象方法
public class Male extends Person {
@Override
public void eat() {
System.out.println("Male eat a lot!");
}
@Override
public void pee() {
System.out.println("Male pee by standing up");
}
@Override
public void sleep() {
System.out.println("Male sleep");
}
}
//创建改导出类的对象
Person p = new Male();
3.可以创建一个没有任何抽象方法的抽象类。(若有这样一个类,包含任何抽象方法都显得没有实际意义,而且我们也想阻止产生这个类的任何对象)
4.抽象类并不需要所有的方法都是抽象的。
作用:
1.明确类的抽象性,并告诉用户和编译器打算怎样来使用它们。
2.抽象类是很有用的重构工具,使我们能很容易的将公共方法沿着继承层次向上移动(也就是将公共方法抽取重构到抽象类中)
2.接口
interface关键字使抽象更进一步,产生一个完全抽象的类,没有提供任何具体的实现。(只有方法名,参数列表和返回类型,没有任何方法体。接口只提供了形式,而未提供任何具体实现)
public interface People {
void eat();
void sleep();
void pee();
}
一个接口表示:“所有实现了该特定接口的类看起来都像这样”
接口被用来建立类和类之间的协议(protocol)。
接口不仅仅是一个极度抽象的类,因为接口允许我们通过创建一个能够被向上转型为多种基类的类型
来实现类似于多重继承的特性。(Java只支持单继承,但可以通过实现接口来达到多继承的效果)
接口中可以包含域,但是这些域隐式地是static和final的。
使用implements关键字让一个类遵循某个接口(或是一组接口)。它表示:"接口只是它的外貌(what it looks like),我们用类实现接口来声明它是如何工作的(how it works)"
3.完全解耦
策略设计模式: 创建根据所传递的参数对象的不同而具有不同的行为的方法(这类方法包含所要执行的算法中
固定不变的部分,而策略包含变换的部分,策略就是传递进去的参数对象)适配器设计模式: 适配器中的代码将接受所拥有的接口,并产生所需要的接口。
将接口从具体实现中解耦使得接口可以应用于多种不同的具体实现,因此代码也就更具复用性。
Java编程思想学习笔记——接口的更多相关文章
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想 学习笔记1
一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...
- [Java编程思想-学习笔记]第1章 对象导论
1.1 抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...
- Java编程思想 学习笔记11
十一.持有对象 通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...
- Java编程思想学习笔记——类型信息
前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定 ...
- Java编程思想 学习笔记10
十.内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...
- Java编程思想 学习笔记7
七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...
- Java编程思想学习笔记——注解
前言 在Android开发的过程中,我们为了减少重复代码的编写,会使用类似ButterKnife,AndroidAnnotations 这类依赖注解库.代码示例如下: //不使用 Button btn ...
- Java编程思想学习笔记_6(并发)
一.从任务中产生返回值,Callable接口的使用 Callable是一种具有泛型类型参数的泛型,它的类型参数表示的是从方法call返回的值,而且必须使Executor.submit来去调用它.sub ...
随机推荐
- Android 避免APP启动闪黑屏(Theme和Style)
前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解决,最后找到了下面的方法.闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和on ...
- [转]httpclient编码
这几天都在纠结Java Web开发中的中文编码问题.其实,很多Java Web开发者都被中文编码“折磨”过,网络上有大量的讨论.以前我也读过这方面的博文,读完后感觉似乎懂了,好像知道了编码问题的原因和 ...
- Map 与 JavaBean 的相互装换
目的 为了方便使用 DbUtils,在插入数据时需要传入含有占位符的 SQL 语句和对应占位符的值(数组),封装代码如下: /** * 插入实体 */ public static <T> ...
- js如何获取到本周的第一天和最后一天,本月的第一天和最后一天以及本季度的第一天和最后一天
1.首先来一个自己公司项目的源码: 项目需求描述: 从20150712日开始, , 需求①:根据当前时间返回每一周 .周一~周日的日期(需返回2种格式 格式1:7月13日,格式2:2015-07-13 ...
- MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!2017年06月15日 19:59:44 蓝色-鸢尾 阅读数:2062版权声明:本文为博主原创文章,如需转 ...
- JavaScript(五):变量的作用域
一.变量的分类 在JavaScript中变量分为两种: 全局变量 局部变量 二.变量的作用域 1.局部变量的作用域 局部变量:在函数内部定义的变量称为局部变量,其作用域为该函数内部,在该函数外部不能被 ...
- APICloud 真机连接失败
今天在公司将APICloud 的项目进行趁机测试的时候,发现连接失败,报如下错: 排查步骤: 1.看手机wifi与电脑是否在同一网段: 就是看ip前面的三段是不是一样.比如ip地址是 192.168. ...
- jQuery源码学习扒一扒jQuery对象初使化
神奇的jQuery可以这样玩jQuery("#id").css()或 jQuery("#id").html() 这么玩jQuery("#id" ...
- C++ 定时器任务类实现
#ifndef __TIMERTASK_H_ #define __TIMERTASK_H_ /* 定时器任务基类 */ #include "asr_taskinterface.h" ...
- Ubuntu下允许Root用户的操作 (图形界面登录、su切换……)
Ubuntu安装后,root用户默认是被锁定了的,不允许登录,也不允许“su”到 root.虽然这样的设置使安全性更高一些,但对于开发者来 说就显得很不方便了.如何让Ubuntu允许root用户直接登 ...