文章目录
一、接口的含义
java中接口有两种含义:
(1)类的所有能被其他程序访问的方法构成类的接口
(2)interface定义的接口类型
二、接口的声明
接口类型和抽象类类似,都不能被实例化,接口内的方法默认为抽象方法,没有方法体
public interface xxx{
public void work();//默认为抽象方法
}
用implements来访问接口,类中需要为接口中所有的抽象方法编写方法体,否则该类是抽象类
public class x implements xxx{
public void work(){
//...
}
}
三、接口要点
1、接口中的变量
接口中所有变量都是public static final的,所有变量都必须被显式初始化
public interface xxx{
int a1;//编译出错,必须显式初始化
protected a2=0;//编译出错,a2必须是public static final类型
int a3=1;//编译成功
}
2、接口中的默认方法和静态方法
允许在接口中用default定义默认方法,static定义静态方法,有方法体
public interface xxx{
default void method1(){//声明默认方法
System.out.println("default method1");
}
static void method2(){//声明静态方法
System.out.println("static method2");
}
void method3();//声明抽象方法
}
外部实例化调用默认方法和抽象方法,直接通过接口调用静态方法
public class x implements xxx{
public void method3(){//编写xxx中method3抽象方法的方法体
//...
}
public static void main(String[] args){
x a=new x();
x.method2();//直接调用静态方法
a.method1();//通过实例调用默认方法
a.method3();//通过实例调用抽象方法
}
}
3、接口中的方法
接口中的方法默认都是public类型的,并且必须是public类型的
4、接口的继承
接口也可以继承别的接口
interface base{
void method1();
}
interface sub extends base{//sub接口将继承base中的method1方法
void method2();
}
5、多接口
一个类可以实现多个接口,但是只能继承一个抽象类
public class x implements a,b,c{
//...
}
6、引用变量
允许将一个引用变量声明为接口类型,而实际上引用实现接口的类的实例
7、类的实现
类在实现接口的抽象方法时,必须用显式地使用public修饰符,因为接口的抽象方法的访问限制默认为public,不显式将被认为是缩小了接口中定义的方法的访问权限。
三、instanceof
判断一个引用类型所引用的对象是否是一个类的实例,这里的类可以是父类也可以是接口
引用变量 instanceof 类名或者接口名
类名或接口名是以下三者时表达式返回true
(1)引用变量的类
(2)引用变量类的直接或间接父类
(3)引用变量类实现的接口
四、‘==’和equals()方法
a==b;
a.equals(b);
只有当a和b所指向的是同一个实例时这两个表达式才返回true
JDK中有些类覆盖了object的equals方法,如String,会判断内容相不相同而不是所指代的实例相不相同