浅谈Java Interface
来源:互联网 发布:苹果app下载不了软件 编辑:程序博客网 时间:2024/04/29 21:41
对于Java初学者来说,可能会有这样一个疑惑----我们定义了一个接口,但是我们在实现这个接口的类中,还要实现接口中的所有方法,那还不如直接就在这个类中写实现方法,岂不更便捷,还省去定义接口麻烦?那么接口在Java中的作用到底是什么呢?
1、定义
接口是由一组相关的空方法构成的。
2、作用
接口是个规范。因为它可能要被多个类去实现,程序怎么知道他们是有关联的呢?既然不是一个类去实现,那么是有很多地方有用到,大家需要统一标准。甚至有的编程语言(Object-)已经不把接口叫interface,直接叫protocol。
统一标准的目的,是大家都知道这个是做什么的,但不需要知道具体怎么做。比如,Comparable找个接口是用来比较两个对象的,那么如何比较呢?
数字有数字的比较方法,字符串有字符串的比较方法,学生(自己定义的类)也有自己的比较方法。
软件开发中一个很重要的一个理念就是“解耦”,接口和接口实现就是在干这件事,定好规范,任你实现,效率可高,可低,实现内容也可随时间变化而变化,但是调用关系是不变的。
3、优点:
(1)程序是可拓展的。你在修改你具体的实现类的时候,不需要去修改调用它的类;这个呢,是java编程时候强调的“对拓展开放,对修改关闭”原则。当然这也是java多态性的体现。
(2)就是java通过Interface实现多继承。继承的一个好处就是代码的复用,减少代码错误。
4、生活实例
(1)假如我开了一个宠物粮店,声明所有宠物都可以来我这里买粮食,这就相当于一个接口。
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(PetRestautrant pet){
pet.buy();
}
}
好了,这个时候我这个老板出现了,我可以给他们卖粮食了,相当于测试类
public class Tests{
public static void main(String[] args){
test t=new test();
PetRestaurant dog=new DogPet();
PetRestaurant cat=new CatPet();
t.buy(dog);
t.buy(cat);
}
}
- 浅谈Java Interface
- 浅谈一下JAVA中的接口interface
- 浅谈abstract和interface
- 浅谈Interface使用01
- Java Interface
- Java Interface
- Java Interface
- Java Interface
- java interface
- Java interface
- Interface JAVA
- java: Interface
- Java Interface
- java interface
- java interface
- Java Interface
- Java Interface
- java interface
- VMWare 解决“intel VT-x 处于禁用状态”的问题
- My deep learning reading list
- Android 四大组件之Service 生命周期
- ObReferenceObjectByHandle例程
- javaweb学习笔记_day1
- 浅谈Java Interface
- SSL 之根证书
- apk反编译
- java工具类–自动将数据库表生成javabean
- Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)
- ionic 打包App优化包大小
- 黑马程序员——Java基础——继承之多态(三)
- 将Centos的yum源更换为国内的阿里云源
- C# 导出DataTable数据到Excel文件中