理解Java接口

2021年09月15日 阅读数:1
这篇文章主要向大家介绍理解Java接口,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

接口只是一个规范,因此里面的方法都是空的。
假如我开了一个宠物粮店,声明全部宠物均可以来我这里买粮食,这就至关于一个接口,

public interface PetRestaurant {
public void buy();
}

当一只狗看到了,知道本身是宠物,因此它去实现这个接口
public class DogPet implements PetRestaurant {
@Override
public void buy() {
System.out.println("我是狗,我要买狗粮");
}
}
当一只猫看到了,知道本身也是宠物,因此也去实现这个接口
public class CatPet implements PetRestaurant {
@Override
public void buy() {
System.out.println("我是猫,我要买猫粮");
}

}
当狗和猫来个人店以前,我是不知道他们究竟是什么,可是当他们来到个人店,我就知道一个要猫粮食,一个要狗粮食。由于他们都实现了 我这个接口,均可以买。下面这个类至关于一个接待顾客的类,即店小二,他接待全部实现了我这个宠物店接口的动物,传进来一个PetRestaurant 类型的宠物,注意,这个PetRestaurant 是接口
public class test {
public void buy(PetRestaurant pet)
{
pet.buy();
}
}

好了,这个时候我这个老板出现了,我能够给他们卖粮食了,至关于测试类
public class Tests {
public static void main(String[] args) {
PetRestaurant dog = new DogPet(); //实例化一个狗,至关于把狗顾客实例化
PetRestaurant cat = new CatPet();//实例化一个猫,至关于把猫顾客实例化

test t = new test(); //实例化一个店小二
t.buy(cat); //把猫交给店小二
t.buy(dog); //把狗交给店小二
}

}
这样运行的结果就是
我是猫,我要买猫粮
我是狗,我要买狗娘

你知道吗,整个过程我这个店主其实根本不知道来的究竟是猫是狗仍是其余什么,我只要有一个店小二,把这些来的不知什么动物都所有交给店小二,店小二就知道怎么去卖了,由于这些狗啊猫啊都实现了我这个宠物店的接口,而店小二就负责接待全部实现了我这个接口的动物。这就有一个好处,假如明天来了一头小猪,只要它实现了我这个接口,我只管交给店小二处理就OK了,我这个店小二根本不须要变化,我这个店主也只须要实例化一下这个动物就OK
你想,假如没有接口,会怎么办,来一个猫,我要去创造一个猫,还要实例化,来一只狗,我要建立一只狗,一样要实例化,还要配备专门的店小二去接待,就会至关麻烦
 
==================================
 

接口是个规范”,这句没错。
不如直接就在这个类中写实现方法岂不是更便捷”,你怎么保证这个 接口就一个类去实现呢?若是多个类去实现同一个接口,程序怎么知道他们是有关联的呢?

既然不是一个类去实现,那就是有不少地方有用到,你们须要统一标准。 甚至有的编程语言(Object-C)已经不把接口叫 interface,直接叫 protocol。

统一标准的目的,是你们都知道这个是 作什么的,可是具体不用知道具体 怎么作
好比说:
我知道 Comparable 这个接口是用来比较两个对象的,那么如何去比较呢?
数字有数字的比较方法,字符串有字符串的比较方法,学生(本身定义的类)也有本身的比较方法。

而后,在另一个负责对象排序(不必定是数字喔)的代码里面,确定须要将两个对象比较。
这两个对象是什么类型呢?
Object a,b?确定不行,a > b 这样的语法没法经过编译。
int a,b?也不行?一开始就说了,不必定是数字。
....
因此,Comparable 就来了。他告诉编译器,a b 两个对象都知足 Comparable 接口,也就是他们是能够进行比较的。具体怎么比较,这段程序不须要知道。
因此,他须要一些具体的实现,Comparable 接口有一个方法,叫 compareTo。那么这个方法就是用来取代 <、> 这样的运算符。
由于运算符是编译器保留给内置类型(整数、浮点数)进行比较用的,而不是一个广义的比较运算。

若是你能够明白 JDK 自身库里面诸如 Comparable 这样已经有的接口,那么就很容易理解本身在开发程序的时候为何须要用到接口了。
 
 
上一篇: 接口测试基础
下一篇: java接口理解