摘要:接口的对象可以利用子类对象的向上转型进行实例化赋值。接口文件保存在结尾的文件中,文件名使用接口名。接口相应的字节码文件必须在与包名称相匹配的目录结构中。接口不能包含成员变量,除了全局常量定义。
概念
接口,在JAVA编程语言中是一个引用类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口中只能包含抽象方法和全局常量。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
接口的声明语法格式如下:
[访问修饰符] interface 接口名称 [extends 其他的接口名] { // 声明全局常量 (static final变量) // 抽象方法 }
接口有以下特性:
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
接口中的方法都是公有的(public),public也可以省略。
接口的子类可以通过implements关键字实现多个接口。
接口的子类(如果不是抽象类)必须覆写接口中的全部抽象方法。
接口的对象可以利用子类对象的向上转型进行实例化赋值。
接口与类相似点:
一个接口可以有多个方法。
接口文件保存在 .java 结尾的文件中,文件名使用接口名。
接口的字节码文件保存在 .class 结尾的文件中。
接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了全局常量(static final定义)。
接口不是被类继承了,而是要被类实现。
接口支持多继承,可以使用extends继承多个接口。
示例
interface A { public void print(); } interface B { public void get(); } class X implements A,B{ public void print(){ System.out.println("A接口的抽象方法"); } public void get(){ System.out.println("B接口的抽象方法"); } } public class testDemo { public static void main(String[] args) { /* X x = new X(); A a = x; //向上转型 B b = x; //向上转型 b.get(); */ A a = new X(); B b = (B)a; b.get(); System.out.println(a instanceof A); System.out.println(a instanceof B); System.out.println(a instanceof X); } } 输出结果: B接口的抽象方法 true true true
总结:不要被引用变量所代表的类型所迷惑,而要看具体该引用变量所指向的实例对象(new 创建出来的类型)。
实际开发中接口的核心作用定义不同层之间的操作标准,即定义一个标准。
表示一种操作能力,这种情况下,接口里可能不包含任何方法。
将服务端的远程方法暴露给客户端。
抽象类和接口的对比抽象类和接口在使用形式上非常类似.
区别点 | 抽象类 | 接口 |
---|---|---|
关键字 | abstract class | interface |
组成 | 构造方法、普通方法、抽象方法、static方法、常量、变量 | 抽象方法、全局常量 |
子类使用 | class 子类 extends 抽象类 | class 子类 implement 接口1,接口2,... |
关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类,可以继承多个父接口 |
权限 | 抽象类可以使用各种权限 | 接口只能使用public |
继承限制 | 单继承 | 多继承,子类可以实现多个接口 |
子类 | 子类都必须重写全部的抽象方法 | 同抽象类 |
实例化 | 无法直接实例化,依靠子类对象的向上转型进行对象的实例化 | 同抽象类 |
如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
当extends和implement同时使用时,extends要放在前面。
Java8中的默认方法和静态方法Oracle已经开始尝试向接口中引入普通方法和静态方法(static),以此来减少抽象类和接口之间的差异。现在,我们可以为接口提供默认实现的方法了并且不用强制子类来实现它。
jdk1.8 允许在接口里面定义普通方法,但普通方法必须使用default修饰。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73550.html
摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...
摘要:能否声明一个内容为空的接口可以。能否将接口声明为不允许,这样做会导致编译错误。当异常没有被捕获时,会发生什么当前线程所在的线程组会执行一个叫的方法,最后程序会异常退出。非静态内部类可以使用哪些修饰符非静态内部类可以使用或修饰符。 原文地址 http://www.instanceofjava.com/2014/12/core-java-interview-questions.html 1...
摘要:目录介绍问题汇总具体问题好消息博客笔记大汇总年月到至今,包括基础及深入知识点,技术博客,学习笔记等等,还包括平时开发中遇到的汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善开源的文件是格式的同时也开源了生活博客,从年 目录介绍 00.Java问题汇总 01.具体问题 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技...
摘要:一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行。这种在编译时被强制检查的异常称为被检查的异常。通过获取原始异常。构造器对于在构造阶段可能会抛出异常,并要求清理的类,最安全的做法是使用嵌套的子句。 点击进入我的博客 Java异常处理的目的在于通过使用少于目前数量的代码来简化大型、可靠的程序的生成,并且通过这种方式可以使你更自信:你的应用中没有未处理的错误。 12.1 概念 异...
阅读 2026·2021-11-08 13:14
阅读 2934·2021-10-18 13:34
阅读 2021·2021-09-23 11:21
阅读 3581·2019-08-30 15:54
阅读 1751·2019-08-30 15:54
阅读 2918·2019-08-29 15:33
阅读 2568·2019-08-29 14:01
阅读 1940·2019-08-29 13:52