接口是抽象的,不能创建变实例,可以创建变量,使用规则:
(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
(2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;(3)接口的对象可以利用子类对象的向上转型进行实例化。
(4)一个类可以实现多个接口但是只能继承一个类(不管抽象还是不抽象的类都只能是继承一个爸爸)。
(5)里面的组成只有抽象方法和全局常量。所以很多时候为了书写简单,可以不用写public abstract 或者public static final。接口中的访问权限只有一种:public
(6)接口中默认是public修饰,若子类中没用public修饰,则访问权限变严格了,给子类分配的是更低的访问权限。所以,在定义接口的时候强烈建议在抽象方法前加上public ,子类也加上:
下面是不规范的:
interface A{
String MSG = "hello";
void print();
}
class X implements A
{
void print()
{
System.out.println("接口A的抽象方法print()");
}
}
public class TestDemo
{
public static void main(String[] args)
{
A a = new X();
a.print();
}
}
下面是规范的写法
interface A{ String MSG = "hello";
public void print();
}
class X implements A
{
public void print()
{
System.out.println("接口A的抽象方法print()");
}}
对于子类而言,除了实现接口外,还可以继承抽象类。若既要继承抽象类,同时还要实现接口的话,使用一下语法格式:
class 子类 [extends 父类] [implemetns 接口1,接口2,...] {}
在接口中如果使用了static去定义一个内接口,它表示一个外部接口:
interface A{
public void funA();
static interface B{//使用了static,是一个外部接口
public void funB();
}
}
class X implements A.B{
@Override
public void funB() {
}
}