Java接口剖析
理解几个问题:
1、为什么要使用接口,好处在哪?
2、接口对应的设计模式是什么?
1、接口的定义:[可见度] interface 接口名称 [extends 其他的类名]
/* 文件名 : Animal.java */
interface Animal {
public void eat();
public void travel();
}
2、接口的实现:...implements 接口名称[, 其他接口, 其他接口..., ...] ...
/* 文件名 : MammalInt.java */
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();
}
}
3、为啥么要有接口呢?争辩
接口就是一份契约,由类实现契约。契约中我编写了某些大的方针与前提,而签了约的类可以具体问题具体分析来实现自己的功能
原文知乎地址:https://www.zhihu.com/question/20111251
例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现方法,那我不如直接就在这个类中写实现方法岂不是更便捷,还省去了定义接口?接口在java中的作用是什么?个人觉得只是一种规范。大家的看法呢?
好的答复:
======================================================
1、
这是一个初学者非常常见的问题。
接口就是个招牌。
比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC,然后你就知道今天中饭有着落了。
KFC就是接口,我们看到了这个接口,就知道这个店会卖炸鸡腿(实现接口)。
那么为神马我们要去定义一个接口涅,这个店可以直接卖炸鸡腿啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不能直接简单粗暴的冲进去叫服务员给两个炸鸡腿了。
要么,我们就要进去问,你这里卖不卖炸鸡腿啊,卖不卖汉堡啊,卖不卖圣代啊(这就是反射)。很显然,这样一家家的问实在是非常麻烦(反射性能很差)。
要么,我们就要记住,中山路108号卖炸鸡,黄山路45号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。
例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现方法,那我不如直接就在这个类中写实现方法岂不是更便捷,还省去了定义接口?
接口就是个招牌。
比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC,然后你就知道今天中饭有着落了。
KFC就是接口,我们看到了这个接口,就知道这个店会卖炸鸡腿(实现接口)。
那么为神马我们要去定义一个接口涅,这个店可以直接卖炸鸡腿啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不能直接简单粗暴的冲进去叫服务员给两个炸鸡腿了。
要么,我们就要进去问,你这里卖不卖炸鸡腿啊,卖不卖汉堡啊,卖不卖圣代啊(这就是反射)。很显然,这样一家家的问实在是非常麻烦(反射性能很差)。
要么,我们就要记住,中山路108号卖炸鸡,黄山路45号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。
=======================================================
2、KFC这个例子这样解释可能更贴切:挂了KFC的招牌,我们不用进去就知道他家卖哪些食物,就可以直接去点上校鸡块、黄金烤鸡腿堡。没有挂这个招牌,就算卖的东西和KFC一模一样,我们不进去看菜单就不会知道。
=======================================================
3、
问:还是不明白!!既然接口是为了协调,实现是不用接口管的;那么为什么不用文档来规定呢,在注释的地方说明也可以啊,,而在代码中添加个interface ,到底有何用???
答:文档是给人看的,接口是给编译器看的。
人会犯错,而编译器不会。
而且程序员写的是代码,不是文档,文档只是代码的补充。
你先去写几行程序就知道了
人会犯错,而编译器不会。
而且程序员写的是代码,不是文档,文档只是代码的补充。
你先去写几行程序就知道了
========================================================
4、
Java是强类型语言,在调用方法时,编译器会检查这个方法是否存在,当定义了接口时,就确保该方法一定会存在。
=========================================================
每天都做更好的自己,不纠结于输赢成败

浙公网安备 33010602011771号