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来保存元素. ...
随机推荐
- python学习笔记(12)--程序设计方法学
计算思维: 逻辑思维:推演和演绎 实证思维:实验和验证,引力波->实验 计算思维:设计和构造,计算机为代表,汉诺塔递归. 计算思维特征 抽象和自动化,抽象问题的计算过程,利用计算机自动化求解. ...
- python 网络编程 IO多路复用之epoll
python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...
- 在delphi中生成GUID
什么是 GUID ? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...
- oldriver
功能: 1:数据详情:统计商家所关联邮箱的商家店铺的当天或者最近一周,最近一个月的订单情况,sku,order,value,回评率数据在具体哪个国家的销售情况. 增强版提供更丰富的数据详情和自定义功能 ...
- linux Vi使用
前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式vi编辑器有3种模式:命令模式.输入模式.末行模式. ...
- 11/1/2018模拟 Max
题面 也就是说, 随机序列RMQ.(\(n \le 8388608\), \(m \le 8*10^6\)) 解法 我写了笛卡尔树+tarjan 然而听神仙说, 因为数据随机, 建完树暴力找lca就行 ...
- 洛谷 P1112 波浪数
题目描述 波浪数是在一对数字之间交替转换的数,如 121212112121211212121 ,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数 191919191919191919 是一个十进 ...
- 洛谷P1209修理牛棚题解
题目 这个题一眼看上去是一个贪心,但是一个贪心题就一定要用一个贪心的做法来做吗,为什么不能写一个DP呢,这个题我们可以从他修理牛棚的角度来看,价值就是一个木板可以修几个,但是也同时消耗掉了一个木板的长 ...
- bzoj 2588 : Spoj 10628. Count on a tree
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- poi的cellstyle陷阱,样式覆盖
问题 cell.getCellStyle().setFont(font); 这句话本来只是想设置这一个单元格cell的字体样式,但是实际上却影响了很多个单元格的样式. 问题出在了,Excel模板中这些 ...