接口的概念
接口,主要是用来描述类需要具有什么样的功能(方法),而不给出每个功能具体实现,把这些功能的实现交给实现该接口的类去实现,实现该接口的类必须实现该接口的所有方法(接口的静态方法跟默认方法除外)。
接口有以下几个特点:
- 接口中方法都默认且必须用
public
修饰的,因为是默认的所以可以省略不写。 - 接口中的域(属性)也是默认且必须用
public static final
修饰 - 接口跟抽象类一样不能实例化,可以声明变量
- 接口中不能有实例域也就是成员变量(ps:如果有违反了第二条, 接口不能被实例化有实例域也没啥意义)
- 实现接口时,必须将实现方法声明为
public
- 在 jdk 1.8 前接口不能有实现方法,之后就可以有了,可以用
static
跟default
声明实现方法。 - 可以用
instanceof
检查对象是属于某个一样的,去检查对象是否实现了某个接口。
用 interface
声明一个接口:
package com.project;
public interface Person {
// 吃东西
void eat();
}
用 implements
实现一个接口
package com.project;
public class Woman implements Person{
@Override
public void eat() {
System.out.println("正在吃苹果");
}
}
接口中的静态方法
接口中的静态方法必须写具体实现,且不被实现该接口的类继承,可以通过 接口名.方法名调用
类似于类的静态方法。
用 static
声明一个静态方法
package com.project;
public interface Person {
// 吃东西
public static void eat() {
System.out.println("正在吃苹果");
}
}
不需要也不能实现接口的静态方法
package com.project;
public class Woman implements Person{
public static void main(String[] args) {
// 调用接口静态方法
Person.eat();
}
}
接口中的默认方法
默认方法提供了接口方法的默认实现,如果实现接口的类没有重写默认方法,那么采用默认实现。
跟静态方法不同的是,实现类会继承接口的默认方法,可以选择实现或者不实现。
package com.project;
public interface Person {
// 吃东西
public default void eat() {
System.out.println("人正在吃苹果");
}
}
默认方法冲突
如果两个接口方法名相同,有类实现类这两个接口的话,实现类必须覆盖。
如果接口跟父类方法名冲突,父类优先,接口方法会被忽略。
网友评论