接口中常见的成员

  1. 全局常量 public static final

  2. 抽象方法 public abstract

接口中所有成员的修饰符都是固定的,在定义接口的时候如果没有写上,编译器会自动加上,所以编译的时候也能通过。

interface Demo{
    int a = 9;
}

class Test {
    public static void main(String[] args){
        System.out.println(Demo.a); // 9
    }
}

a是publc staic final修饰的,所以可以使用类名调用。

尽管编译器会自动给接口的成员加上固定修饰符,但是为了提高阅读性,还是建议加上修饰符。

注意,由于接口中的方法固定修饰符都是public的,当继承覆盖方法的时候必须也是public的,否则无法完成覆盖。
子类可以实现接口,如果不实现接口的所有方法,可以将子类定义成抽象类。

一个类可以实现多个接口---多实现

interface A {
    public abstract void show();
}
interface B {
    public abstract void show();
}

class Test interface A,B{
    public void show(){  //该方法实现A,B中的两个方法,不需要实现两次
        ...
    }
}

接口与接口之间是继承关系,而且接口直接可以多继承

interface A{
}
interface B{
}
interface C extends A,B{
}

问题:为什么java接口的字段要定义成 static final的?
static:如果一个类实现了多个接口,就有可能出现重名变量,接口没有super,哪到底访问的是哪个变量呢?需要使用类名来区分变量,属于类的变量应该定义成static。
final: static的变量的类的,也就是所有实现了该接口的类公有的,如果不是final的,那么就有可能会被修改,class A 修改了之后class B得到的就是修改后的数据,这不安全。
简而言之,就是防重名,防修改。

注:上述内容如有理解不足或错误,忘请指出。


一语天然
334 声望3 粉丝