为什么使用接口?

问题

  要求实现防盗门的功能

分析

  • 门有开和关的功能,锁有上锁和开锁的功能
  • 将门和锁分别定义为抽奖类

  那么问题就是防盗门即继承了门的同时又继承了锁,而Java的继承是单继承,接口可多继承

解决

  • 将门定义为抽奖类,锁定义为接口
  • 防盗门继承门,实现锁的接口
  • 解决了多继承,更好的使用多态

什么是接口?

  Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现

  因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

如何使用接口?

  [ public ]   interface   接口名   [ extends   超接口表 ]   {    接口体   }

  接口是一种只由常量定义和抽象方法组成的特殊类。

  接口体中的内容是一系列常量的定义和方法的定义,不提供方法的实现(即没有方法体),用分号结尾。

  接口的所有变量都默认是final   static属性,所有的方法都是public  adstract属性。

  如果一个类要实现某个接口,必须实现接口的所有方法。

面向接口编程

  1. 定义Door抽象类:具有开门,关门的功能
  2. 定义Lock接口:具备上锁,开锁的能力
  3. 编写TheftproofDoor类:继承类实现接口
  4. 编写测试类:让防盗门关门,上锁,开锁,开门
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 接口篇的更多相关文章

  1. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  2. Java提高篇——对象克隆(复制)

    假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...

  3. Java提高篇(三三)-----Map总结

    在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. ...

  4. Java提高篇(三二)-----List总结

    前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...

  5. java提高篇(三十)-----Iterator

    迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...

  6. java提高篇(二九)-----Vector

    在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...

  7. Java提高篇(二八)------TreeSet

    与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap>中LZ详细讲解了TreeMap实现机制,如果 ...

  8. Java提高篇(二七)-----TreeMap

    TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...

  9. java提高篇(二四)-----HashSet

          在前篇博文中(java提高篇(二三)-----HashMap)详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素. ...

随机推荐

  1. python之路--递归, 二分法

    一 . 递归 自己调用自己, 递归的入口(参数)  和  出口(return),  树形结构的遍历. def func(): print("我是递归") func() func() ...

  2. 在IWMS中的分页效果

    第一步,你需要在后台修改你所要显示的新闻数目: 第二步,你需要把这段代码加到你需要分页的列表里边 代码: <%=config.TopAd%><asp:Literal id=" ...

  3. 如何在MAC上运行exe程序

    1. 首先下载并运行CrossOver 运行CrossOver需要收费,试用期为14天,运行CrossOver 2. 选择exe应用程序,新建容器,安装exe程序 3.安装成功后,运行exe应用程序启 ...

  4. 如何使用命令从linux服务器下载文件到windows

    1.直接使用命令从linux下载文件到windows //登录linux服务器导出mysql数据 mysqldump -hrm-2ze8mpi5i65429l1q.mysql.rds.aliyuncs ...

  5. Python自动化测试之selenium从入门到精通

    1. 安装selenium 首先确保python安装成功,输入python -V 在windows下使用pip安装selenium,详情如图所示: 在ubuntu下使用pip install sele ...

  6. BugFree 安装

    BugFree基于PHP和MySQL开发,是免费且开发源代码的缺陷管理系统.服务器端在Linux和Windows平台上都可以运行:客户端无需安装任何软件,通过IE,FireFox等浏览器就可以自由使用 ...

  7. vue 響應接口

    全局方式: 增加屬性和set()和get(): vue.set(targname,key,vaule) targname:對象名或者數組名 key:字符串 value:任何值 刪除屬性和set()和g ...

  8. @Html自定义属性

    @Html.DropDownList("CardCode", (SelectList)ViewData["cardcodeselectlist"], " ...

  9. solr单机版搭建

    需要把solr服务器安装到linux环境: 第一步:安装linux.jdk.tomcat. [root@bogon ~]# ll total 8044 -rw-r--r--. 1 root root ...

  10. iOS应用的性能调试

    1.Static Analysis 使用之前先清理一下数据:product-->Clean 可能遇到的问题: a.发现工程中有多个“User-facing text should use loc ...