Java 接口篇
为什么使用接口?
问题
要求实现防盗门的功能
分析
- 门有开和关的功能,锁有上锁和开锁的功能
- 将门和锁分别定义为抽奖类
那么问题就是防盗门即继承了门的同时又继承了锁,而Java的继承是单继承,接口可多继承。
解决
- 将门定义为抽奖类,锁定义为接口
- 防盗门继承门,实现锁的接口
- 解决了多继承,更好的使用多态
什么是接口?
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现
因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
如何使用接口?
[ public ] interface 接口名 [ extends 超接口表 ] { 接口体 }
接口是一种只由常量定义和抽象方法组成的特殊类。
接口体中的内容是一系列常量的定义和方法的定义,不提供方法的实现(即没有方法体),用分号结尾。
接口的所有变量都默认是final static属性,所有的方法都是public adstract属性。
如果一个类要实现某个接口,必须实现接口的所有方法。
面向接口编程
- 定义Door抽象类:具有开门,关门的功能
- 定义Lock接口:具备上锁,开锁的能力
- 编写TheftproofDoor类:继承类实现接口
- 编写测试类:让防盗门关门,上锁,开锁,开门
package javaTest4;
//抽象类 门
abstract class Door{
public abstract void open();
public abstract void close();
}
//接口:锁
interface Lock{
int i=1; //都是静态常量
public void lock(); //都是抽象方法
public void unlock();
}
//接口 照相机
interface Crama{
public void takePhotos();
}
//防盗门类
class FDoor extends Door implements Lock,Crama{ @Override
public void open() {
System.out.println("开门");
} @Override
public void close() {
System.out.println("关门");
} @Override
public void lock() {
System.out.println("上锁");
} @Override
public void unlock() {
System.out.println("开锁");
} @Override
public void takePhotos() {
System.out.println("开门时,拍照");
}
}
public class test5 { public static void main(String[] args) {
FDoor fd=new FDoor();
fd.close();
fd.lock();
fd.unlock();
fd.open();
fd.takePhotos();
} }
必须知道的接口特性
- 接口不可以被实例化,常作为类型使用
- 接口是一种特殊的抽象类
- 实现类必须实现接口的所有方法
- 实现类可以实现多个接口(Java中的多继承)
- 接口中的变量都是静态常量
- 接口默认是public
Java 接口篇的更多相关文章
- java接口调用——webservice就是一个RPC而已
很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...
- Java提高篇——对象克隆(复制)
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- Java提高篇(三三)-----Map总结
在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
- java提高篇(三十)-----Iterator
迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...
- java提高篇(二九)-----Vector
在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...
- Java提高篇(二八)------TreeSet
与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap>中LZ详细讲解了TreeMap实现机制,如果 ...
- Java提高篇(二七)-----TreeMap
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...
- java提高篇(二四)-----HashSet
在前篇博文中(java提高篇(二三)-----HashMap)详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素. ...
随机推荐
- linux pstree命令
pstree命令可以使进程以tree的形式显示 pstree -ssystemd─┬─UVPHostd───6*[{UVPHostd}] ├─acpid ├─2*[agetty] ├─crond ├─ ...
- Python:matplotlib绘制直方图
使用hist方法来绘制直方图: 绘制直方图,最主要的是一个数据集data和需要划分的区间数量bins,另外你也可以设置一些颜色.类型参数: plt.hist(np.random.randn(1 ...
- SQL Server中的完全连接(full join)
一.建库和建表 create database scort use scort create table emp ( empno int primary key, ename ), sal int, ...
- POJ1151-扫面线+线段树+离散化//入门题
比较水的入门题 记录矩形竖边的x坐标,离散化排序.以被标记的边建树. 扫描线段树,查询线段树内被标记的边.遇到矩形的右边就删除此边 每一段的面积是查询结果乘边的横坐标之差,求和就是答案 #includ ...
- 洛谷P5020货币系统
题目 这个题打眼看上去可能是一个数论或者DP,其实我们可以简化一下题意,即 给定一个集合\(\alpha\),找到几个数使得这几个数可以拼凑起来这个集合里所有的数,且需要使这些数的个数最小. 这样这个 ...
- 【BZOJ3771】Triple 生成函数 FFT 容斥原理
题目大意 有\(n\)把斧头,不同斧头的价值都不同且都是\([0,m]\)的整数.你可以选\(1\)~\(3\)把斧头,总价值为这三把斧头的价值之和.请你对于每种可能的总价值,求出有多少种选择方案. ...
- 直接使用security.basic.path无效|——springboot2.0以上的security的配置
问题 springcloud 版本 为 Finchley.RELEASEspringboot 版本为 2.0.3.RELEASE 现在有需求,/swagger-ui.html 页面需要添加登录认证,但 ...
- MongoDB 数据恢复与导出
MongoDB登录mongo --host localhost --port 27017 -uroot -pdbpasswd --authenticationDatabase admin查看所有dbs ...
- How to intall and configure Haproxy on Centos
Install Haproxy CentOS/RHEL 5 , 32 bit:# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-r ...
- 洛谷CF1071E Rain Protection(计算几何,闵可夫斯基和,凸包,二分答案)
洛谷题目传送门 CF题目传送门 对于这题,我无力吐槽. 虽然式子还是不难想,做法也随便口胡,但是一些鬼畜边界情况就是判不对. 首先显然二分答案. 对于每一个雨滴,它出现的时刻我们的绳子必须落在它上面. ...