一文带你彻底懂java的接口

1. 接口介绍

  • 这里的接口指的是关键字的interface
  • 接口的意义:是对不具有继承关系的同类行为的抽象,以便复用(多态的一种)
  • 接口的方法是一种约束

2. 接口的定义

  • 接口中所有的方法都是默认 public abstract,因此接口中的方法都是抽象的
  • 接口中所有变量都是默认 public static final,因此接口中变量就相当于常量
public interface OperateCar {//接口只包含常量,抽象方法、默认方法和静态方法

   int changeLanes(Direction direction,
                   double startSpeed,
                   double endSpeed);
   int signalTurn(Direction direction,
                  boolean signalOn);
   double E = 2.718282;   // E就是个常量在这里           
         ......
   // more method signatures
}

3. 向接口添加方法

public interface DoIt {//原接口
   void doSomething(int i, double x);
   int doSomethingElse(String s);
}

1.创建一个原接口的子接口,在子接口中添加方法

public interface DoItPlus extends DoIt {

   boolean didItWork(int i, double x, String s);
}

2.在原接口中将新方法定义为默认方法

public interface DoIt {

   void doSomething(int i, double x);
   int doSomethingElse(String s);
   default boolean didItWork(int i, double x, String s) {//默认方法:由default修饰的方法
     ...
   }
}
  1. 在原接口中将新方法定义为静态方法
public interface DoIt {

   void doSomething(int i, double x);
   int doSomethingElse(String s);
   static  boolean didItWork(int i, double x, String s) {//静态方法:由static修饰的方法
     ...
   }
}
  • 不要向接口添加抽象方法(如果有实现该接口的类),否则所有实现旧的原接口的类都将中断
  • 第二,三种使您能够向原接口添加新功能,并确保与为未修改的原接口的编写的类能正常使用(而且这些类可以使用新功能)

4. 接口的实现

  • 不能使用new来实例化一个接口
  • 实现接口的类的实例方法优于接口的默认方法
public class FlyingCar implements OperateCar, FlyCar {
    // ...
    public int startEngine(EncryptedKey key) {
        FlyCar.super.startEngine(key);//调用接口FlyCar的这个方法
        OperateCar.super.startEngine(key);
    }
}
}//使用接口的类必须实现其接口的所有方法,除非它是抽象类

5. 接口的继承

  • 可以单继承和多继承
public interface GroupedInterface extends Interface1, Interface2, Interface3 {//多继承

    double E = 2.718282;//E就是个常量
 
    void doSomething (int i, double x);
    int doSomethingElse(String s);
}
  • 当你要继承的接口含有默认方法时:
  1. 不修改
  2. 将默认方法声明为抽象方法。
  3. 重写默认方法。

6. 接口作为类型

  • 如果定义了一个类型为接口的引用变量,则分配给它的任何对象都必须是实现该接口的类的实例
  • 可以在任何可以使用任何其他数据类型名称的地方使用接口名称
public Object findLargest(Object object1, Object object2) {
   Relatable obj1 = (Relatable)object1;//Relatable是一个接口
   Relatable obj2 = (Relatable)object2;
   if ((obj1).isLargerThan(obj2) > 0)
      return object1;
   else 
      return object2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳衣白卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值