package com.test1;

/**
* 接口的使用
*/
public class test1 { public static void main(String[] args) {
//创建Compute
Compute compute = new Compute();
//创建Camera
Camera camera = new Camera();
//创建Phone
Phone phone = new Phone();
//调用
compute.useUsb(camera);
compute.useUsb(phone); /* 显示
我是相机,开始工作了
我是相机,停止工作了
我是手机,开始工作了
我是手机,停止工作了
* */
}
} /**
* 定义一个USB接口
*/
interface Usb {
//接口中声明了两个方法 //开始工作
public void start(); //停止工作
public void stop();
} /**
* 定义一个电脑类,使用Usb接口
*/
class Compute {
public void useUsb(Usb usb) {
usb.start();
usb.stop();
}
} /**
* 定义一个相机类,实现Usb接口
* 注意:一个类实现某个接口,须实现这个接口里的所有方法
*/
class Camera implements Usb { @Override
public void start() {
System.out.println("我是相机,开始工作了");
} @Override
public void stop() {
System.out.println("我是相机,停止工作了");
}
} /**
* 定义一个收集类
*/
class Phone implements Usb { @Override
public void start() {
System.out.println("我是手机,开始工作了");
} @Override
public void stop() {
System.out.println("我是手机,停止工作了");
}
} /*
总结了4点关于JAVA中接口存在的意义: 1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。
3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。 那么什么是接口呢?
接口是一种能力
1:接口的命名规则与类型不同。如果修饰符是public。则该接口在整个项目中可见 ,如果省略修饰符 则该接口只能在该包可见
2:接口中可以定义常量,不能定义变量,接口中的属性都会自动用public static final修饰,即接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值
3:接口中所有的方法抽象方法。接口中的方法都会自动用public abstract修饰。即接口中只有全局抽象方法,
4:和抽象类一样,接口不能被实例化,接口中不能有狗构造方法
5:接口之间可以通过extends 实现继承关系,一个接口可以继承多个接口。但接口不能继承类
6:接口的实现类必须实现接口的全部方法,否则必须定义为抽象类
7:一个类只能有一个直接父类,但可以通过implements实现多个接口,当雷在继承父类的同时有实现了多个接口时,extends关键字必须位于implements关键字之前 接口的注意事项:
01.接口不能实例化,因为接口是比抽象类抽象程度更高的类型
02一个类如果实现了某个接口,必须重写该接口中的所有方法
03.接口不能有构造,但是抽象类可以有
04.接口中所有方法都公有的抽象方法
05.接口中的所有字段必须都是公有的静态常量
06.接口本身也是一种数据类型
07.接口只是为实现它的类定义了规范,保证实现类方法签名和接口中对应方法一致。
08.通过接口可以实现多继承
09.一个借口中最好只定义一个方法,防止接口污染 java中接口的特点:
1. 接口中的方法,永远都被public来修饰
2. 接口中没有构造方法,也不能实例化接口对象
3. 接口中只有方法的声明,没有方法体
4. 接口中只有常量,如果定义变量,在编译的时候都会默认加上“public static final”
5. 接口中定义的方法都需要实现类来实现,如果实现类不能实现接口中的所有方法,则实现类需要定义为抽象类
6. 静态方法不能被子类重写(覆盖),因此接口中不定声明静态方法
7. 使用接口可以实现多继承
*/

  

Java基础系列 - 接口(功能,用途和优势)的更多相关文章

  1. 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!

    目录 抽象类介绍 为什么要用抽象类 一个抽象类小故事 一个抽象类小游戏 接口介绍 接口与类相似点: 接口与类的区别: 接口特性 抽象类和接口的区别 接口的使用: 接口最佳实践:设计模式中的工厂模式 接 ...

  2. 夯实Java基础系列1:Java面向对象三大特性(基础篇)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 [https://github.com/h2pl/Java-Tutorial](https: ...

  3. 夯实Java基础系列11:深入理解Java中的回调机制

    目录 模块间的调用 多线程中的"回调" Java回调机制实战 实例一 : 同步调用 实例二:由浅入深 实例三:Tom做题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 ...

  4. Java基础系列-ArrayList

    原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...

  5. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  6. 夯实Java基础系列5:Java文件和Java包结构

    目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...

  7. 夯实Java基础系列9:深入理解Class类和Object类

    目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...

  8. 夯实Java基础系列13:深入理解Java中的泛型

    目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试 ...

  9. 夯实Java基础系列15:Java注解简介和最佳实践

    Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...

随机推荐

  1. 一、Windows docker入门篇

    win7.win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-toolbox/win ...

  2. SVN上传本地项目到服务器

    1. 在服务器新建一个文件夹目录: 2. 将新建的目录在本地check out下来: 3. 将自己的项目拷贝到check out下来的文件夹下: 4. 右键点击svnàAdd,选择所有添加: 5. 右 ...

  3. linux USB 编程

    Linux USB架构 可以看出一个USB体系需要4个驱动:USB设备驱动(主要编写这部分),USB主控制器驱动,Gadget驱动,UDC驱动. USB主要有4个功能: MassStorage:大容量 ...

  4. 解决 google 浏览器记住密码导致输入框样式改变(变成淡黄色背景)

    直接在页面上使用css代码: input:-webkit-autofill , textarea:-webkit-autofill, select:-webkit-autofill { -webkit ...

  5. hive分区理念介绍

    一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...

  6. Java 函数调用是传值还是传引用? 从字节码角度来看看!

    原文地址:点击打开

  7. Win10设置开机进入启动设置模块(进入安全模式等)

    Win10设置开机进入启动设置模块(进入安全模式等) Win10系统要进入安全模式或其他启动模式选择时,需要在系统中做如下设置后,才可在开机的时候对模式进行选择,操作如下: 1.依次点选:win10设 ...

  8. testlink关联redmine设置

    Testlink关联Redmine 公司用testlink对测试用例进行维护,redmine关系项目及bug,所以为了方便期间,将Testlink关联Redmine,方便测试用例执行后,在redmin ...

  9. 第一篇:python简介

    前言:作为对于python小白而言,我们需要知道什么是python,为什么学习python而不是其他编程语言,它相比于其他语言有什么优势,同时了解python 的执行操作过程又是怎么样的,它有哪些分类 ...

  10. cmd中for的用法

    在cmd窗口输入for /?后的原文,被我自己“翻译”了一下,更像人话了. 推荐去https://www.cnblogs.com/cbugs/p/8992059.html这篇部落格里去看看,讲的更好. ...