java中的接口

java中接口

1.java接口定义

百度百科给的这样的定义:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为,

2. java接口的声明与特性

  • 声明
    • 声明语法:
[访问修饰符] interface 接口名称 [extends 其他的类名] {
        // 变量
        // 抽象方法
}

又或者下面这个例子:
每个人的生活习惯和存款是不一样的,所以针对具体的人,我们需要遵守一套接口,这样才不会是异类。

    interface man{
        void run(); 
        void get_money();
    }
    class father implements man {
        void run(
            System.out.println("I can run 5Km");
        ) 
        void get_money(
            System.out.println("I have 50000000 rmb");
        ) 
    }
    class son implements man {
        void run(
            System.out.println("I can run 1Km");
        ) 
        void get_money(
            System.out.println("I have 500 rmb");
        ) 
    }
  • 接口特性
    • 接口方法不能在接口中实现,只能在使用该接口的类中实现,否则编译器报错。
    • java接口中的方法隐式指定为public abstract(即:都是公有的),而且也只能是public abstract..所以一般情况下,我们看到的接口中,没有public abstract关键字,都是interface.
    • java接口中的变量,隐式定义为public static final

3.java接口与类的差别

  • 当类实现接口时,类要实现接口中所有的方法,否则类必须声明为抽象类。
interface man{
    void run();
    void get_money();
}

class father implements man {
    public void run() {
        System.out.println("I can run 5Km");
    }
    public void get_money(){
        System.out.println("I have 50000000 rmb");
    }
}

class son implements man {
    public void run() { //小细节,如果这里丢掉了public,编译就报错了,因为接口中的类型是public abstract.
        System.out.println("I can run 1Km");
    }
    public void get_money() {
        System.out.println("I have 500 rmb");
    }
}

public class interface_t {
    public static void main(String []args){
        father fa1 = new father();
        son sa1 = new son();
        fa1.run();
        fa1.get_money();
        sa1.run();
        sa1.get_money();
    }
}

运行结果:

I can run 5Km
I have 50000000 rmb
I can run 1Km
I have 500 rmb

针对上面的例子如果我们在father接口中没有实现get_money()方法,那么编译器就报错了。下面提示可以看到,父类father不是抽象方法,而且也没有覆盖抽象方法。如果我们把父类改成抽象类,现有的代码也不能运行,因为抽象类无法实例化,所以抽象类和接口必须被继承。这里大家注意就行了。

interface_t.java:6: error: father is not abstract and does not override abstract method get_money() in man
class father implements man {
^
interface_t.java:16: error: cannot find symbol
        fa1.get_money();
           ^
  symbol:   method get_money()
  location: variable fa1 of type father
2 errors
  • 类通过关键字implements 来使用接口。
  • 接口不能实例化对象
  • 接口没有构造函数
  • 接口中的成员变量,默认都是public static final
  • 接口支持多继承,(java中类只能继承一个类,所以接口的出现,使得java可以近似支持多继承)

你可能感兴趣的:(java)