implements
定义时的格式为interface 接口名
(一般在接口名的开头加一个大写的I)
//定义一个接口
public interface ClassName {
String getClassName();//抽象方法
}
interface在编译后也为class文件,所以它也是类
- 接口可以看作是
抽象方法的集合
,大部分情况下接口中所有的方法都是抽象方法(即接口中的方法没有{ }),但接口中可以存在default,static修饰的方法或成员属性
interface USB{ //创建一个接口
static void Charge() { //static
System.out.println("充电");
}
default void Transfer(){ //default
System.out.println("传输数据");
}
}
public class MyUSB implements USB{
public static void main(String[] args) {
USB myusb = new MyUSB();
USB.Charge();//static关键字属于类,而不是类的实例。
myusb.Transfer();
}
}
- 接口没有构造方法,也不能实例化对象.因为
接口中的方法都是抽象的
,是没有方法体的 - 接口中只能定义常量。不能定义其他成员变量
- 接口中的方法可以省略public abstract,系统会默认使用,省略可以减少代码的冗余
被调用的格式为public 子类 implements 接口1,接口2,······;
//定义一个接口
public interface ClassName {
String getClassName();
}
//实现获取当前的类名
class Company implements ClassName {
@Override
public String getClassName() {
return this.getClass().getName();
/*
getClass获取当前对象的类名
getName以String形式返回名称
*/
}
}
class Test{
public static void main(String[] args) {
Company com = new Company();
System.out.println("类名="+com.getClassName());
}
}
- 接口不会被类继承(extends),而是
被类实现
,使用implements),实现类实现接口的时候,一定要加上public
访问权限修饰符 - 一个类可以同时继承多个接口(与继承不同的一点),且接口之间是可以继承的,而且可以多继承
- 一个实现接口的类,必须
实现接口内所描述的所有方法
,否则就必须声明为抽象类(通过这种强迫重写使得该类带上某种特征)
- 接口属于引用类型
- 接口具有解耦合的作用,所以大部分情况下只有abstract来作为一种规范,而非实现
interface IOpen {
//遥控器可以打开电视
void open();
}
interface ITV {
//电视可以播放
void Play();
}
public class Remote implements IOpen {
//创建对象方便open方法中调用方法
private ITV tv;
public void setTV(ITV tv) {
this.tv = tv;
}
@Override
public void open(){
tv.Play();
}
}
class Mi implements ITV {
@Override
public void Play() {
System.out.println("小米电视播放");
}
}
class Vidda implements ITV {
@Override
public void Play() {
System.out.println("海信电视播放");
}
}
class WatchTV {
public static void main(String[] args) {
Remote remote = new Remote();
//只需要用对应的遥控器即可打开电视
Mi mi = new Mi();
remote.setTV(mi);
remote.open();
Vidda vidda = new Vidda();
remote.setTV(vidda);
remote.open();
}
}