接口学习主要根据大佬文章,本文主要是对大佬文章的一些摘要
原文链接:https://blog.csdn.net/qq_19782019/article/details/80259836
接口概念
个人理解:接口是一种特殊的类,里面全部是public static final的常量和public abstract类型的方法。
接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准。
或者我们可以直接把接口理解为100%的抽象类,即接口中的方法必须全部是抽象方法。
接口的特点
接口其实是一个特殊的类,它拥有方法和属性,只是接口中声明的方法只能是抽象的。(即只有方法标识符,而没有方法体)。
接口主要指明了一个类必须要做什么和不能做什么,相当于类的蓝图。(因为要用一个非抽象的类实现一个接口就必须要实现这个接口所拥有的所有抽象方法)。
如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类。
(必须记住:抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法,而接口是百分之百的抽象类)
为什么要用接口
接口被用来描述一种抽象。
Java不像C++一样支持多继承,可以通过实现接口来弥补这个局限。
接口也被用来实现解耦。
接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?
接口和抽象类之间又有什么区别呢?
原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是public static final的。
接口的简单实现
public class All_Example {
public static void main(String[] args) {
Example_1 test = new Example_1();
test.printi();
test.printj();
}
}
interface Example {
//接口中的属性默认是 public static final的
int i = 5;
//接口中的方法默认是 public abstract的
void printi();
}
interface Example_2 {
//接口中的属性默认是 public static final的
int j = 6;
//接口中的方法默认是 public abstract的
void printj();
}
class Example_1 implements Example, Example_2 {
int i = 7;//注意这里的i并不会影响接口里面的i值
public void printi() {
System.out.println(i);
}
public void printj() {
System.out.println(j);
}
}
interface Example2 {
int k = 0;
void example2();
}
//Class 'Example4' is public, should be declared in a file named 'Example4.java'
/*
public abstract class Example4 implements Example2 {
public abstract void example2();
}
*/
abstract class Example3 implements Example2 {
public abstract void example2();
}
关于接口的几个重点
我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的
我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。(实际上就是使用了Java中多态的特性)(向上转型)
一个类可以实现不止一个接口
从而实现多继承
一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承
一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法
接口中所有的方法都是public abstract的,所有的属性都是public,static,final的
接口也可以用来实现解耦
接口的标识用法
虽然接口内部定义了一些抽象方法,但是并不是所有的接口内部都必须要有方法,比如Seriallizable接口,Seriallizable接口的作用是使对象能够“序列化”,但是Seriallizable接口中却没有任何内容,也就是说,如果有一个类需要实现“序列化”的功能,则这个类必须去实现Seriallizable接口,但是却并不用实现方法(因为接口中没有方法),此时,这个Serilizable接口就仅仅是一个“标识”接口,是用来标志一个类的,标志这个类具有这个“序列化”功能。