Java 接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
JDK8开始,可以定义全局常量、抽象方法、静态方法和默认方法。
一个类只能继承一个抽象类,但一个类可以实现多个接口。
Interface 保存在.java的文件中,类保存在.class文件中。
public interface InterfaceTest {
//静态方法
public static void method1(){
System.out.println("Method1:quick sort");
}
//默认方法
public default void method2(){
System.out.println("Method2:bubble sort");
}
public default void method3(){
System.out.println("Method3:heap sort");
}
public default void method4(){
System.out.println("Method4:Insert sort");
}
public default void method5(){
System.out.println("InterfaceTest Method5:sort");
}
public default int method6(){
return 1;
}
}
public interface InterfaceTestB {
public default void method5(){
System.out.println("InterfaceTestB method5: sort");
}
}
接口在类中实现:
public class SubInterfaceTest {
public static void main(String[] args) {
SubClass s = new SubClass();
//s.method1();//不能调用
//1.接口中的静态方法只能通过接口调用
InterfaceTest.method1();//Method1:quick sort
//2.通过实现类的对象,可以调用接口中的默认方法
s.method2();//Method2:bubble sort
//3.如果实现类重写了接口的默认方法,调用时仍然调用的是重写的方法
s.method3();//SubClass method3:heap sort
//4.如果子类或实现类继承的父类和实现的接口声明了同名同参数的方法,那么子类在没有重写的情况下,默认调用父类中的方法
s.method4();//Superclass method4:insert sort
//5.如果实现类实现了多个接口,多接口中定义了同名同参数的方法,在没有重写的情况下,报错-》接口冲突,想要使用必须重写该方法
//s.method5();//不重写会编译报错
s.method5();//SubClass method4:sort
}
}
class SubClass extends SuperClass implements InterfaceTest, InterfaceTestB{
public void method3(){
System.out.println("SubClass method3:heap sort");
}
public void method5(){
System.out.println("SubClass method4:sort");
}
}
接口的应用:代理模式
/*
接口的应用:代理模式
*/
public class NetworkTest {
public static void main(String[] args) {
Server server = new Server();
ProxyServer proxyserver = new ProxyServer(server);
//代理类的方法包含了被代理类的方法
proxyserver.browse();//Network check before visiting network.
//Server visit network.
}
}
interface NetWork{
public void browse();
}
//被代理类
class Server implements NetWork{
@Override
public void browse() {
System.out.println("Server visit network.");
}
}
//代理类
class ProxyServer implements NetWork{
private NetWork work;
public void check(){
System.out.println("Network check before visiting network.");
}
public ProxyServer(NetWork work){
this.work = work;
}
@Override
public void browse() {
check();
work.browse();
}
}