interface详解
interface(接口)
1.interface的定义:
public interface 接口名{}
接口(interface)是抽象方法和常量值的定义的集合。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
2.interface的抽象方法:
写抽象方法的几种形式,可以省略public abstract 或public 或 abstract都可以。
public interface interfaceDemo01 {public abstract void show();void eat();abstract void sleep();public void study(); }
如果要想实现接口,就要有一个实现类去实现,而且要实现它其中的抽象方法,并且要用implements关键字。形式为实现类名 implements 接口名。
public class test implements interfaceDemo01{@Overridepublic void show() {}@Overridepublic void eat() {}@Overridepublic void sleep() {}@Overridepublic void study() {} }
3.interface的默认方法:
在接口中可以有默认方法,形式为 public default 返回值类型 方法名(){ }。
接口中默认方法的实现:
public interface interfaceDemo01 {public abstract void show();public default void play(){System.out.println("我在敲代码");} }
接口中默认方法的调用:需要创建对象
public class demo {public static void main(String[] args) {test t = new test();t.play();} }
接口中默认方法还可以被实现类覆盖重写
public class test implements interfaceDemo01{@Overridepublic void show() {}@Overridepublic void play() {System.out.println("实现类重新接口默认方法");} }
4.interface的静态方法:
在接口中可以有静态方法,形式为 public static 返回值类型 方法名(){ }。
接口中静态方法的实现:
public interface interfaceDemo01 {public abstract void show();public default void play(){System.out.println("我在敲代码");}public static void moYu(){System.out.println("上课摸鱼");} }
接口中静态方法的调用:不需要创建对象,直接可以用 接口名.静态方法名();即可
public class demo {public static void main(String[] args) {test t = new test();t.play();interfaceDemo01.moYu();} }
接口中静态方法不能被实现类重写,因为它属于接口独有,并且在实现类中可以定义一个与接口中静态方法方法名相同的静态方法,则这个静态方法归实现类独有。
5.interface的常量定义和使用:
在接口中定义常量,形式为public final 数据类型 变量名 = 数值;。这里面的public 和 final都可以省略掉。
public interface interfaceDemo01 {public int m = 100;public final int n = 10;int w = 100;public abstract void show();public default void play(){System.out.println("我在敲代码");}public static void moYu(){System.out.println("上课摸鱼");} }
public class test implements interfaceDemo01{@Overridepublic void show() {System.out.println(m);System.out.println(n);System.out.println(w);}@Overridepublic void play() {System.out.println("实现类重新接口默认方法");}public static void moYu(){System.out.println("实现类独有");} }
6.interface之间的多继承:
Java中的继承都是单继承的,就是说一个父类可以被多个子类继承但是一个子类只能有一个父类。但是一个接口可以被不同实现类去实现,这就是我们说的Java中的多态的概念。下面我们再来说一下接口的多继承的概念,就是说一个接口是可以继承多个接口的。
一个实现类可以继承多个接口,但要实现每个接口中的抽象方法。不过如果接口中存在相同的接口默认方法(也就是两个接口中默认方法名相同),这就是接口默认方法冲突。这个解决办法就是在实现类中覆盖重写该默认方法即可。
如果接口默认方法名和另一个接口的抽象方法同名,返回值类型也相同,这种冲突可以通过实现类覆盖重写该方法来解决问题。但是若返回值类型不相同则无法解决该问题,因为这纯属没事闲的才这样做。
7.继承父类并实现多接口:
一个类既可以继承父类也可以是很多接口的实现类。形式为:类名 extends 父类名 implements 接口名,接口名...
当父类的成员方法名和接口中的默认方法名相同时,返回值类型也相同,则优先继承父类,即不显式的实现接口也不会报错。
当父类的成员方法名和接口中的抽象方法名相同时,返回值类型也相同,则优先继承父类,即不显式的实现接口也不会报错。(这句话的意思就是因为子类继承了父类中的成员方法相当与覆盖重写了接口中的抽象方法,所以子类中可以不实现该抽象方法,调用时直接调用父类中的该成员方法即可)。
public class Fu {public Fu() {}public void play(){System.out.println("我在玩");}public void s(){System.out.println("m");} }
public interface interfaceDemo01 {public int m = 100;public final int n = 10;int w = 100;public abstract void show();public default void play(){System.out.println("我在敲代码");}public static void moYu(){System.out.println("上课摸鱼");} }
public interface interfaceDemo02 {public abstract void show();void s(); }
public class test extends Fu implements interfaceDemo01,interfaceDemo02{@Overridepublic void show() {System.out.println(m);System.out.println(n);System.out.println(w);}public static void moYu(){System.out.println("实现类独有");} }
public class demo {public static void main(String[] args) {test t = new test();t.show();t.play();t.s();interfaceDemo01.moYu();test.moYu();} }
输出结果:
100
10
100
我在玩
m
上课摸鱼
实现类独有
interface详解相关推荐
- JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)
转载自 JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited) jdk1.5起开始提供了4个元注解,用来定义自定义注解的注解,它们 ...
- PHP接口interface详解
PHP interface详解 首先提三个问题 为什么要用接口? 什么是接口? 接口怎么使用? 什么是接口 使用关键词 interface 定义,就像是定义一个标准的类一样,但其中定义所有的方法都是空 ...
- JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)。
jdk1.5起开始提供了4个元注解,用来定义自定义注解的注解,它们分别是: @Target 指定注解使用的目标范围(类.方法.字段等),其参考值见类的定义:java.lang.annotation.E ...
- SPI(Service Provider Interface)详解
介绍 SPI 全称为 (Service Provider Interface) ,是JVM内置的一种服务提供发现机制.Java在语言层面为我们提供了一种方便地创建可扩展应用的途径.我们只需要按照SPI ...
- Go语言interface详解
出处:https://www.cnblogs.com/mafeng/p/6208014.html interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的 ...
- Spring Boot 最核心的 3 个注解详解
最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过. 然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失 ...
- android中接口的作用是什么意思,详解Android接口Interface的使用和意义
本文介绍是Android的一个重要的东西,接口Interface,详解两个方面: (1)Java是继承的,接口Interface是可以多个的,恰恰弥补了这个缺点. (2)回调,接口Interface里 ...
- functional java_java中functional interface的分类和使用详解
java 8引入了lambda表达式,lambda表达式实际上表示的就是一个匿名的function. 在java 8之前,如果需要使用到匿名function需要new一个类的实现,但是有了lambda ...
- CUDA之nvidia-smi命令详解---gpu
nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...
- getinstance方法详解_二、设计模式总览及工厂模式详解
二.架构师内功心法之设计模式 2.架构师内功心法之设计模式 2.1.课程目标 1.通过对本章内容的学习,了解设计模式的由来. 2.介绍设计模式能帮我们解决哪些问题. 3.剖析工厂模式的历史由来及应用场 ...
最新文章
- js 获取当前时间 随记
- 【数论基础】模运算详解及其应用
- 【转】VMware虚拟机中CentOS设置固定IP
- linux高级数据存储
- 升级ESXi Host
- 兴林村脱贫谋定向往宜居村庄-农业大健康·万祥军:美丽蝶变
- 如何做到服务器虚拟化,老生常谈 如何打造服务器虚拟化的基础
- 你懂change buffer吗
- 2015已经过去三分之一了
- htmlplay前端编辑器下载_2019年最好用的代码编辑器推荐
- [转]这才是真正的3D显示!Leap Motion推出次毫米级3D手动控制技术,让人手和影像融为一体...
- 数组算法 java 115918581
- linux下安装gcc
- 联系人排序java代码_Android仿微信联系人按字母排序
- 最简单DIY基于STM32F407探索者开发板的MPU6050陀螺仪姿态控制舵机程序
- 视频教程-H3C-H3CNE 华三网络工程师从入门到精通 自学视频课程[肖哥]-H3C认证
- python矩阵相乘函数_Python实现的矩阵转置与矩阵相乘运算示例
- 11月程序员全国程序员平均工资
- 单片机的外部中断(二)
- 湖北智禾教育:淘宝店铺如何找货源?
热门文章
- Day 12 - 标签图片的方法与实作
- 计算机主机拆机事项,一体机联想s700拆机流程与注意事项
- 如何在Github上建立自己的个人博客网站详细教程
- java 7zip分卷压缩_7zip分卷压缩,rar分卷压缩文件
- 管理API访问令牌的最佳安全实践
- PyTorch中 detach() 、detach_()和 data 的区别
- aac mediarecorder录制_Android音视频录制之MediaRecorder+camera
- C语言游戏设计——扫雷
- 软考高级信息系统项目管理师经验分享
- pyqt5 选择打开文件夹与读取文件夹图片列表