Java——接口(interface)(概念理解+应用举例)

1.概念理解

接口(英文:Interface),在 Java 语言中是一个抽象类型,是抽象方法的集合,接口通常用 interface 来声明。一个类通过继承接口的方式,从而来继承并且实现接口中的抽象方法。

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

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

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

1.1 接口与类的相似点

①一个接口可以有多个方法。

②接口文件保存在 .java 的源文件中,文件名使用接口名。 (如果此接口与其他类定义在同一个 .java 源文件下,则不会出现以此接口命名的 .java 源文件,只会出现包含 main 方法对应类名的 .java 源文件)

③接口的字节码文件保存在 .class 结尾的二进制文件中。(无论此接口是否与其他类定义在同一个 .java 源文件下,只要编译,就会生成所有的类名、接口名命名的 .class 字节码文件)

关于②、③两条内容,大家在创建相应的类、接口之后,可以在 bin 文件夹和 src 文件夹下查看相应的 .java、.class文件。

④接口相应的字节码文件必须在与包名称相匹配的目录结构中。(如果是默认包,则在根目录下)

1.2 接口与一般类的区别

①接口不能用于实例化对象,而类可以(不包括抽象类)。 

②接口没有构造方法,接口中所有的方法必须是抽象方法。

③接口不能包含成员变量,除了 static 和 final 变量。

④接口不是被类继承,而是要被类实现。(虽然我们要使用类去继承接口,但实际上是对接口中的抽象方法的具体实现)

⑤接口支持多继承,但是类不可以多继承。

1.3 接口与抽象类的区别 

①抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。

②抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。 

③接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类中可以有静态代码块和静态方法。

④一个类只能继承一个抽象类,而一个类却可以(继承)实现多个接口。

1.4 接口的特性 

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

②接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错),声明时同样不需要 abstract 关键字。

③接口中可以包含变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。

④接口中的方法是不能在接口中实现的,只能由实现这个接口的类来实现接口中的方法,接口中的方法都是公有的。

1.5 接口的实现

①当类实现接口的时候,类要实现接口中所有的方法。否则,该类必须声明为抽象的类。 

②类使用 implements 关键字实现接口。

下面,我们来看一下声明接口以及使用类去实现接口的具体实例:👇👇👇

 

2.应用举例 

2.1 类实现接口 

//文件名:LikeAnimal.java
public interface LikeAnimal {//声明一个接口
	public void eat();//接口中的两个公共方法
	public void travel();//等待继承此接口的类来实现
}
//文件名:Tiger.java
public class Tiger implements LikeAnimal {//Tiger类继承LikeAnimal接口
	public void eat() {//实现接口中的eat()抽象方法
		System.out.println("老虎正在吃饭!");
	}
	public void travel() {//实现接口中的travel()抽象方法
		System.out.println("老虎喜欢旅行!");
	}
	public String park() {//此类额外创建了一个新方法
		return "公园里有很多只老虎!";
	}
}
//文件名:PlayAnimal.java
public class PlayAnimal {
	public static void main(String[] args) {
		Tiger a=new Tiger();//实例化一个对象
		a.eat();//通过Tiger类对LikeAnimal接口中方法的具体实现,来调用这些方法
		a.travel();
		System.out.println(a.park());
	}
}

大家可以根据代码以及相应的注释,仔细理解一下,程序运行结果如下:👇👇👇

2.2 接口间的单继承

类继承接口,通过 implements 关键字来实现。

接口继承接口,通过 extends 关键字来实现。(和类与类之间的继承是一样的)

//文件名:Sports.java
public interface Sports {
	public void play();
	public void happy();
	public int interesting(int a);
}
//文件名:Basketball.java
public interface Basketball extends Sports {
	public void perfect();
	public String together(String name1,String name2);
	public int friends(int x);
}
//文件名:Football.java
public interface Football extends Sports {
	public void good();
	public void nice();
}

在 Sports 接口中,自己声明了 3 个方法,所以实现 Sports 接口的类需要编写这 3 个方法。

在 Basketball 接口中,自己声明了 3 个方法,并且从 Sports 接口中继承了它的 3 个方法。所以实现 Basketball 接口的类需要编写 3+3=6 个方法。

在 Football 接口中,自己声明了2个方法,并且从 Sports 接口中继承了它的3个方法。所以实现 Football 接口的类需要编写 2+3=5 个方法。

2.3 接口间的多继承

public interface Player extends Basketball,football {
    ...(具体的代码段)
}

接口 Player 同时继承了 Basketball,football 两个接口。

这里就不再详细说了,大家知道接口间不仅可以单继承,也可以多继承就可以了,后面学习的过程中还是会用到的!!! 

2.4 标记接口

最常用的继承接口是没有包含任何方法的接口。

标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。

标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。

public interface Animal {

}

没有任何方法的接口被称为标记接口。标记接口主要用于以下两种目的:

①建立一个公共的父接口。②向一个类添加数据类型。


以上就是博主总结的 Java 语言中接口的一些相关概念,希望对大家的学习有所帮助。在后面的博文中,我们将进入“多态”的学习!!!😀😀😀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章