- 接口概述,特点
- 接口的定义与特点
- 什么是接口
- 接口的基本使用:被实现
- 接口的用法:
- 接口与接口的关系:多继承
- JDK8开始接口新增方法.
- 第一种:默认方法
- 第二种:静态方法
- 第三种:私有方法
- 使用接口的注意事项
接口的格式如下:
JDK 8之前接口中只能有抽象方法和常量。
package com.interface_;
public interface Inter_ {
// public static final abc = "abc";
// 等同:
String abc = "abc";
// public abstract void a();
// 等同:
void a();
}
什么是接口
- 接口更是一种规范,一种必需要干什么的声明,一种约束,用来约束开发者一定要遵循这个接口干什么事。
- 规范得思想使得接口里面的成员必须公开为public
- 由于接口体现规范思想,规范默认都是公开的,所以代码层面,public static final 可以省路不写,默认就是常量。
- 由于接口体现规范思想,规范默认都是公开的,所以代码层面,public abstract可以 省略不写,默认就是抽象方法。
接口是用来被类实现( implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。
创建接口:IDEA——Package——New——JavaClass——Interface
接口在使用的时候就像是一个套接模板,利用接口可以快捷的生成必须得内容。接口方法则靠重写(注意接口的方法均为抽象方法所以必须重写完全部接口方法)。
多实现和单实现没什么区别因此下面只演示单实现的代码:
package com.interface_;
public interface Inter_Human {
String type = "人类种";
void life();
void die();
}
package com.interface_;
public class Class_1 implements Inter_Human{
@Override
public void life() {
System.out.println("人必须活着");
}
@Override
public void die() {
System.out.println("人必须逝去");
}
}
package com.interface_;
public class Main {
public static void main(String[] args) {
Class_1 c1 = new Class_1();
c1.life();
c1.die();
}
}
运行结果: 人必须活着 人必须逝去接口与接口的关系:多继承
- 类和类的关系:单继承。
- 类和接口的关系:多实现。
- 接口和接口的关系:多继承,一个接口可以同时继承多个接口。
不继承的接口多实现演示:
package com.interface_;
public class Class_1 implements Inter_Human,Inter_,Inter_baka{
@Override
public void a() {
}
@Override
public void life() {
}
@Override
public void die() {
}
@Override
public void baka() {
}
}
接口多继承+多实现的演示:
package com.interface_;
public interface Inter_ extends Inter_Human,Inter_baka{
String abc = "abc";
void a();
}
package com.interface_;
public class Class_1 implements Inter_{
@Override
public void a() {
}
@Override
public void life() {
}
@Override
public void die() {
}
@Override
public void baka() {
}
}
可以发现上述两个实现类接口多实现的效果是一样的,但是后者在书写上稍微简洁一些
接口多继承的作用
规范合并,整合多个接口为同一个接口,便于子类实现。
- jdk8之后允许接口中直接定义带有方法体的方法
●类似之前写的普通实例方法:必须用default修饰
●默认会public修饰。需要用接口的实现类的对象来调用
●默认会public修饰, 必须static修饰。
●注意:接口的静态方法必须用本身的接口名来调用。
●就是私有的实例方法:,必须使用private修饰,从JDK 1.9才开始有的。
●只能在本类中被其他的默认方法或者私有方法访问。
package com.Mon5day1;
public interface SportManInter {
void func0();
// jdk8之后开始支持接口内部定义默认方法,包含函数体的函数必须有default修饰,默认就是public修饰可加可不加
// 接口的方法只能由实现类的对象来调用,无须再实现类内部添加覆盖函数
public default void func1(){
System.out.println("Default function of Interface.");
fun3();
};
// 静态方法,直接访问接口名来使用,必须使用static修饰,默认为public,可写可不写
public static void fun2(){
System.out.println("Static Function of Interface");
}
// 私有方法,仅能在接口内部使用,基本是用不上的
private void fun3(){
System.out.println("Private function of Interface.");
}
}
package com.Mon5day1;
public class ImeClass implements SportManInter{
@Override
public void func0() {
System.out.println("Common function of interface");
}
}
package com.Mon5day1;
public class Main {
public static void main(String[] args) {
ImeClass ime = new ImeClass();
ime.func0();
ime.func1();
SportManInter.fun2();
}
}
JDK8新增的3种方法我们自己在开发中很少使用,通常是 Java源码涉及到。现阶段需要理解、识别语法,明白调用关 系即可。使用接口的注意事项
- 接口不能创建对象(绝不能违反)
- 一个类实现多个接口,多个接口中有同样的静态方法不冲突。
- 一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。
- 一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。重写即舍弃所有接口的同名方法,也因此我们是可以说完全用不到的一个语法
- 一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。
interface AA{
void run();
interface BB{
void run();
}
interface CCC extends AA,BB{
// 不报错,这种语法叫规范合并
}
interface AA{
void run();
interface BB{
int run();
}
interface CCC extends AA,BB{
// 报错,一个无返回值一个有返回值,冲突
}



