Java的Interface-笔记

Java - Interfaces

本文参考oracle_interfacetutorialspoint_interface

interface是一种特殊的abstract类,描述的是一种“契约”。

The interface keyword produces a completely abstract class, one that provides no implementation at all.
——《Java编程思想,第4版》

接口和类的不同点:

  • 接口不能进行实例化。
  • 接口没有构造函数。
  • 接口中不能包含实例域(instance fields),其域(fields,变量)只能是 staticfinal
  • 接口中的方法(methods)都是抽象(abstract)的。也就是说,接口不能像抽象类那样保有一般的方法。
  • 接口被类实现而非继承,An interface is not extended by a class; it is implemented by a class.
  • 一个类只能继承(extends)一个父类(具体类或抽象类),但能实现(implements)多个接口。一个接口可以继承(extends)多个接口。
  • 关于 继承extends实现implements:类继承类,接口继承接口,类实现接口。

申明接口(Declaring Interfaces)

interface 关键字:

public interface NameOfInterface {
    // Any number of final, static fields
    // Any number of abstract method declarations
}

申明接口时,有如下默认特性:

  • 接口,默认是 abstract 的,因此申明接口时的 abstract 关键字可以省略。
  • 接口中的方法(methods),默认也是 abstract 的,因此申明方法时的 abstract 关键字也可以省略。
  • 接口中的常量,默认是 public static final 的,因此可以省略这些关键字。
  • 接口中的方法,默认是 public 的,因此可以省略这个关键字(All abstract, default, and static methods in an interface are implicitly public)。

接口中的方法,可以有三种, abstract methods, default methods, 和 static methods,参考这里

  • abstract methods:抽象方法,只有申明,没有实现(即函数签名后直接分号结束,没有函数体)。接口中的方法,若没有被申明成 defaultstatic 的,那默认就是 abstract 方法。
  • default methods:被 default 修饰的方法。
  • static methods:被 static 修饰的方法。

例如:

interface MyInterface {
    double PI = 3.14159;  // 是常量(因此必须初始化),默认是public static final的
    void eat();  // 方法,默认是public abstract的,相应地导致接口MyInterface也成为abstract的
    void sleep();
}

实现接口(Implementing Interfaces)

实现(implements)接口的例子:

/* 接口,在被implements时,要么接口中的抽象方法必须被子类实现,要么把子类申明成抽象的。这和抽象类一样 */
interface MyInterface {
    String hi = "Hi";
    void sayhi();
}

/* 第一种:接口中的抽象方法必须实现,否则编译时报错 */
class MyClass1 implements MyInterface {
    // The type MyClass1 must implement the inherited abstract method MyInterface.sayhi()
    @Override
    public void sayhi() {
        // do something
    }
}

/* 第二种:把子类也申明成抽象的,否则编译时报错 */
abstract class MyClass2 implements MyInterface {
}

继承接口(Extending Interfaces)

继承多个接口(Extending Multiple Interfaces)

标记接口(Tagging Interfaces)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值