接口

接口(Interface),个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口特性

  • 接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

注:

(JDK 1.8 以后,接口里可以有静态方法和方法体了。

​ JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。

​ JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。)

接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承。

抽象类和接口的区别

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

接口语法

interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

Interface关键字用来声明一个接口

public interface NameOfInterface
{
   //任何类型 final, static 字段
   //抽象方法
}

定义接口实例

interface Animal {
   public void eat();
   public void travel();
}

继承接口实例 使用implements 关键字

public class MammalInt implements Animal{
 
   public void eat(){
      System.out.println("Mammal eats");
   }
 
   public void travel(){
      System.out.println("Mammal travels");
   } 
 
   public int noOfLegs(){
      return 0;
   }
 
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

概念、特点、优势、应用场合

概念

接口的目的是指相关或者不相关类的多个对象的共同行为

接口体现了程序设计的多态和高内聚低耦合的设计思想

接口反应某一类事物具有什么能力

  • 关注该类事物可以完成什么操作
  • 但是不关注操作的具体细节

特点

  • 接口不是类、没有构造方法、不能实例化
  • 接口之间的继承也是用 extends 实现 但接口可以继承多个父接口
  • 接口中所有“没有方法体”的方法都是抽象方法( 默认都是 public abstract 修饰 )
  • 在接口中只能声明常量默认是 public static final 修饰的

优势

定义接口有利于代码的规范,有利于对代码进行维护,保证代码的安全和严密,一个好的程序一定符合高内聚低耦合的特征

应用场合

当一个类有共同的使命,比如说要完成一件共同的事,可能他们之间并没有任何关系,只是做的事情相同

interface关键字

接口是一系列方法和特征的集合(方法和特征是类的组成部分)

implements关键字

是一个类实现一个接口用的关键字,它是用来实现接口中定义的抽象方法。
实现一个接口,必须实现接口中的所有方法。

  1. 接口可以被多重implements,抽象类只能被单一extends
  2. 接口只有定义,抽象类可以有定义和实现

多继承

java类是单继承的

java接口可以多继承

一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口的,这叫做接口的多实现。并且,一个类能继承一个父类,同时实现多个接口。

public class SuperRobot extends Robot implements Move,Call,Clean,Cooking {

}

面向对象设计原则

1. 单一职责原则(Single Responsibility Principle)

每一个类应该专注于做一件事情。

2. 里氏替换原则(Liskov Substitution Principle)

超类存在的地方,子类是可以替换的。

3. 依赖倒置原则(Dependence Inversion Principle)

实现尽量依赖抽象,不依赖具体实现。

4. 接口隔离原则(Interface Segregation Principle)

应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。

5. 迪米特法则(Law Of Demeter)

又叫最少知识原则,一个软件实体应当尽可能少的与其他实体发生相互作用。

6. 开闭原则(Open Close Principle)

面向扩展开放,面向修改关闭。

7. 组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)

尽量使用合成/聚合达到复用,尽量少用继承。原则: 一个类中有另一个类的对象。

抽象类和接口思维导图

最后修改:2022 年 11 月 09 日
如果觉得我的文章对你有用,请随意赞赏