java接口

Posted 爽走不解释

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java接口相关的知识,希望对你有一定的参考价值。

接口的定义(Interface)

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口到底TM用来干嘛的???

接口就是抽象类的延伸,java为了保证数据安全是不能多重继承的,也就是说继承只能存在一个父类,但是接口不同,一个类可以同时实现多个接口,不管这些接口之间有没有关系,所以接口弥补了抽象类不能多重继承的缺陷,但是推荐继承和接口共同使用,因为这样既可以保证数据安全性又可以实现多重继承。

接口的特点

1、接口的方法声明必须是 public abstract 即便不写默认也是
2、接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
3、接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
4、接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
5、接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
6、接口中的方法都是公有的。

回顾一下抽象类

     1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
     2、抽象方法必须由子类来进行重写。
     3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。
     4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
     5、子类中的抽象方法不能与父类的抽象方法同名。
     6、abstract不能与final并列修饰同一个类。
     7、abstract 不能与private、static、final或native并列修饰同一个方法。

然后来区别一下抽象类和接口:

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

再来区别一下接口和类:

1、接口不能用于实例化对象。
2、接口没有构造方法。
3、接口中所有的方法必须是抽象方法。
4、接口不能包含成员变量,除了 static 和 final 变量。
5、接口不是被类继承了,而是要被类实现。
6、接口支持多继承。

接口声明的语法:

public interface 接口名称 [extends 其他的接口名]    //注意 接口可以继承其他接口
        // 声明变量
        // 抽象方法

比如:

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

接口的实现:

当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

语法:

public class 类名 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();
   

输出结果:

Mammal eats
Mammal trave

接口的含义理解

接口可以理解成统一的协议, 而接口中的属性也属于协议中的内容。但是接口的属性都是公共的,静态的,最终的。

接口的成员特点:

 1、成员变量只能是常量,默认修饰符 public static final
 2、成员方法只能是抽象方法。默认修饰符 public abstract

所以,Java 接口中,使用变量的时候,变量必须被赋值。

//所以接口定义属性
public interface People 
    int age=10;
    String name="输出名字"; // 接口里面定义的成员变量都是  public static final 修饰
    public void eat();  

所有的变量必须给出初始值,且绝对不会被修改,因为隐藏的修饰符为 public static final。

接口的继承

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。

下面的Sports接口被Hockey和Football接口继承:

// 文件名: Sports.java
public interface Sports

   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);

 
// 文件名: Football.java
public interface Football extends Sports

   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);

 
// 文件名: Hockey.java
public interface Hockey extends Sports

   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);

Hockey接口自己声明了四个方法,从Sports接口继承了两个方法,这样,实现Hockey接口的类需要实现六个方法。
相似的,实现Football接口的类需要实现五个方法,其中两个来自于Sports接口。

接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。
如:

public interface Hockey extends Sports, Event

以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法

最后回顾一遍接口的重点

1、我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。
2、一个类可以实现不止一个接口。
3、一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承。
4、一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。
5、接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的。
6、接口用来弥补类无法实现多继承的局限。
7、接口也可以用来实现解耦

欢迎留言评论

以上是关于java接口的主要内容,如果未能解决你的问题,请参考以下文章

Java反射:使用接口初始化对象,但使用字符串值作为类名

Java基础第9天+final关键字多态(上转型,下转型)抽象类(特点,成员特点)接口(特点,成员特点)

Java集合类分析,初始化

接口的特点

Java基础语法要点概括

JAVA定义接口格式: