今天和大家一起学习接口 interface 的用法,首先我们必须明白使用接口带来的两个好处:
1.接口为完全抽象的类,不能被实例化,避免被直接调用。
2.可以将方法与类进行解耦,因 JAVA 是单根继承结构,只能通过 extends 继承一个类,但可用过 implements 实现多个接口,增强了代码的复用性。
我们先来创建一个接口,接口必须通过关键字 interface 来定义,接口中的方法可以定义方法名、参数、返回值,但不能定义任何方法体。此外,接口中可以定义常量,强制默认为 public final。
public interface Shape {
int COUNT = 1;
public void getArea();
void getType();
}
接口中的方法强制被定义为 public,一因为 private 会导致接口无法被外部类实现;二因接口可以被继承,若为 protected或包访问权限 也会导致接口只能为导出类接口或同包类使用,导致接口权限降级;故编译器强制要求接口必修为 public 。
使用接口最重要的一点是:导出类不仅可以向上转型为基类,还可以向上转型为接口,大大增加了代码的灵活性。
public interface Instrument {
void play();
}
public class Wind implements Instrument {
@Override
public void play() {
System.out.println("wind play");
}
}
public class Woodwind extends Wind {
public static void main(String[] args) {
Instrument instrument = new Woodwind();
instrument.play();
Wind wind = new Woodwind();
wind.play();
}
}
wind play
wind play
接下来,再来看看接口的一些有趣特性:
1.接口可以嵌套内部接口,并可分开实现
public interface A {
void a();
interface B {
void b();
}
}
public class AImp implements A {
@Override
public void a() {
}
}
public class ABImpl implements A.B {
@Override
public void b() {
}
}
2.class 类中可以定义 private 接口,但仅能在本类中实现该接口
public class C {
private interface D {
void d();
}
public class CDImpl implements C.D {
@Override
public void d() {
}
}
}
最后,需要说明的是:接口是不具体的类,使用接口会增加代码复杂性,请不要滥用。应当尽可能直接的去使用类,除非接口增加的间接性,可以优化代码设计。
本次分享至此结束,希望本文对你有所帮助,若能点亮下方的**点赞**按钮,在下感激不尽,谢谢您的【精神支持】。
若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!