如何理解Java 中的接口

一、接口(Interface)

        在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法

1、接口的声明

1.1 接口的声明语法格式如下:

[可见度] interface 接口名称 [extends 其他的接口名] {

// 声明变量

// 抽象方法

}

1.2 Interface关键字用来声明一个接口。下面是接口声明的一个简单例子。

/* 文件名 : DemoInterface.java */

import java.lang.*; //引入包

public interface DemoInterface {

//任何类型 final, static 字段

//抽象方法}

1.3 接口有以下特性:

a、接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。

b、接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。

c、接口中的方法都是公有的。

2、接口的实现

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

2.1 接口的实现语法格式如下:

...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...

实例如下:Animal.java 文件代码:

/* 文件名 : Dog.java */

public class Dog implements Animal{

public void eat(){

System.out.println("Dog eats");}

public static void main(String args[]){

Dog d = new Dog ();

d.eat();}}

2.2 重写接口中声明的方法时,需要注意以下规则:

类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。

类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。

如果实现接口的类是抽象类,那么就没必要实现该接口的方法。

2.3 在实现接口的时候,也要注意一些规则:

一个类可以同时实现多个接口。

一个类只能继承一个类,但是能实现多个接口。

一个接口能继承另一个接口,这和类之间的继承比较相似。

3、接口的继承

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

// 文件名: Grandfather.java

public interface Grandfather

{public void setSaveMoney(double money);}

// 文件名: Father.java

public interface Father extends Grandfather

{public void setSaveHouse (int num);}

// 文件名: Son.java

public interface Son extends Father

{public void setSaveCulture ();}

Son接口自己声明了一个方法,从Father接口继承了两个方法,这样,实现Son接口的类需要实现三个方法。

4、接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。

public interface Son extends Father,Grandfather

5、接口特点

1.接口可以多继承

2.接口的方法声明必须是 public abstract 即便不写默认也是

3.接口里面不能包含方法具体实现,只声明

4.类继承接口必须实现接口里申明的全部方法,除非该类是抽象类

5.类里面可以声明 public static final 修饰的变量

6.接口不能被实例化,但是可以被实现类创建

6、什么时候使用抽象类和接口

1、 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

2、 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

3、如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

4、在 JDK1.8,允许我们给接口添加两种非抽象的方法实现:

1)、默认方法,添加 default 修饰即可;

2)、静态方法,使用 static 修饰;示例如下:

interface Test{

//这个是默认方法

default String get(String aa){

System.out.println("我是jdk1.8默认实现方法...");

return "";}

//这个是静态方法

static void staticmethod(){

System.out.println("我是静态方法");}}

调用得话,静态方法只能通过接口名调用,不可以通过实现类的类名或者实现类的对象调用,default 方法只能通过接口实现类的对象来调用。

7、接口的含义理解

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

接口的成员特点:

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。

8、Java 抽象类和接口总结

1、abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个 interface。

2、在 abstract class 中可以有自己的数据成员,也可以有非 abstarct 的成员方法,而在 interface 中,只能够有静态的不能被修改的数据成员(也就是必须是 static final 的,不过在 interface 中一般不定义数据成员),所有的成员方法都是 abstract 的。

3、abstract class 和 interface 所反映出的设计理念不同。其实 abstract class 表示的是 "is-a" 关系,interface 表示的是 "has-a" 关系。

4、实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5、接口中定义的变量默认是 public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6、抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

7、接口中的方法默认都是 public,abstract 类型的。

你可能感兴趣的:(如何理解Java 中的接口)