摘自:https://www.douban.com/note/61810488/

通俗的讲,就是为了降低耦合度。

一个很搞笑的例子:
看看下面的程序: 一个学校里边,有两种人:学生、老师。他们都要吃饭和睡觉。
------------------------------
public interface 人{
    void 吃饭();
    void 睡觉(); }

public class 学生 implements 人{
    public void 吃饭(){
        //去食堂吃饭 }

public void 睡觉(){
        //回寝室睡觉 }
    //其他特有方法,比如泡妞、打游戏 }

public class 老师 implements 人{
    public void 吃饭(){
        //回家吃饭 }

public void 睡觉(){
        //回家睡觉 }

//其它特有方法,比如为生儿育女传宗接代的历史使命努力等不足为外人道的事情 }

public class 学校{
    public void 开饭(人 ren){
    ren.吃饭(); }

public void 放学(人 ren){
    ren.睡觉(); } }

-----------------------------
这里就用到了里氏代换原则,"开饭()"和"放学()"的参数都是人,那么这个地方如果换成学生和老师肯定也可以。
   人 a = new 学生();
     学校.开饭(a); 学校.放学(a);
这样执行的结果就是学生回寝室吃饭。

人 b = new 老师();
    学校.开饭(b); 学校.放学(b);
这样执行的结果就是老师回家吃饭。

为什么要这样写呢?这样写有什么好处呢? 我在开饭的时候完全可以直接调用"学生.吃饭();"、"老师.吃饭();"啊。 接着看。 有一天,学校里来了第三种人,家长。 家长既不是去寝室睡觉也不是回家睡觉,而是旅馆睡觉,既不是去食堂吃饭也不是回家吃饭,而是去下馆子。 这个时候学校这个系统该怎么处理呢? 如果原来没有定义"人"这个接口那就麻烦啦,所有用到人的地方代码都要改。 现在不一样了,我可以直接定义一个类:家长,这个类实现人这个接口就可以了。

好,看代码:
------------------------------
public class 家长 implements 人{
    public void 吃饭(){
        //下馆子 }

public void 睡觉(){
        //去旅馆睡觉 }

//其它特有方法,比如会见老师,晓之以钱,动之以利等等,不一而足 }
-------------------------------

在调用的时候不需要修改任何代码,还和原来一样:
    人 c=new 家长();
       学校.开饭(c);
       学校.放学(c);
轻松搞定家长的食宿问题!

这样一来学校来再多的客人都没关系啊,绝对可以应付自如,这也就是传说中的可扩展性! 不知道初学者看到这里是不是能够明白接口的作用。如果你还不明白,那么你把人这个接口去掉,自己写一个学校开饭和放学的类,然后再加一个家长这个新新人类进去,看看你的代码是什么样子的,再想一下在人口这么多的中国,万一哪天你的学校里来了成千上万个新新人类你该怎么办! 先声明一下,这个案例可不是我想出来的~~ 然后我们就很好理解了,为什么用别人的东西要实现接口呢?很直接的一个原因是这样一来,编程的复杂度就可能会大大降低了。

[Java] 为什么要定义接口的更多相关文章

  1. java类中定义接口

    今天看到一个java类中定义了接口,写个备忘录,记录一下 package com.gxf.test; public class Test_interface { public interface sh ...

  2. java为什么要定义接口等相关解释

    1.接口的作用是实现多重继承  因为只能继承一个类(规定的) 2.一个类只能继承一个父类,但是可以实现一个或多个接口 3.abstract关键词能让你在类里创建一个或多个没有定义的方法—你给出接口,但 ...

  3. java 类内部定义接口

    java类内部可以定义接口,作用可以看作是对类功能的进一步补充,类里面包含两部分:一部分是自己的固定的,一部分是可以变化的,而这可变的部分就编程了一个接口. 另一个作用是避免命名冲突. 示例 类Fru ...

  4. java 类中定义接口的调用方法

    public class Human { public interface MyAction { public void getPower(); } } public class Test{ publ ...

  5. JAVA定义接口格式:

    [public]interface 接口名称 [extends父接口名列表] { //静态常量 [public] [static] [final] 数据类型变量名=常量值; //抽象方法 [publi ...

  6. “全栈2019”Java第六十章:如何定义接口

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. java面向对象程序设计(下)-接口的定义

    抽象类是从多个类中抽象出来的模板,如果将这种抽象进行得更加彻底,则可以提炼出一种更加特殊的"抽象类"-接口(interface),Java9对接口进行了改进,允许在接口中定义默认方 ...

  8. Java定义接口变量为接收类型有什么好处(面向接口编程)

    个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性. 面向接口编程: 一种规范约束 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者 ...

  9. java基础学习总结-接口

    原文链接:http://www.cnblogs.com/xdp-gacl/p/3651121.html 一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如"金丝猴是 ...

随机推荐

  1. BZOJ3098: Hash Killer II(构造)

    Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 2162  Solved: 1140[Submit][Status][ ...

  2. ABAP术语-Document Number

    Document Number 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/28/1055636.html Key which ident ...

  3. 爬虫——urllib.request库的基本使用

    所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.在Python中有很多库可以用来抓取网页,我们先学习urllib.request.(在python2.x中为urllib2 ...

  4. javascript--鼠标拖拽窗口案例(鼠标按下,在鼠标移动过程中,盒子跟着一起移动,鼠标松开,盒子停止移动)

    界面如图所示: 要求:在“信息注册”栏,按下鼠标,然后鼠标在页面移动,在鼠标移动过程中,该窗口跟着鼠标移动,当鼠标松开的时候,窗口停止移动.点击“关闭”,该窗口隐藏. 实现思路: 1.页面结构分析:一 ...

  5. 简单Maven Dos命令语句

    简单Maven Dos命令语句: 打包:mvn package 编译:mvn compile 编译测试程序:mvn test-compile 清空:mvn clean 运行测试:mvn test 生成 ...

  6. C# 用HttpWebRequest模拟一个虚假的IP伪造ip

    有人会说:IP验证是在TCP层完成的,不是HTTP层完成的,如果伪造IP的话可能连TCP的三次握手都完不成.我这里说的不是完全意义的伪造.如果你使用透明代理上网,那么在透明代理发送给服务器端的HTTP ...

  7. Jackson 触发的String.intern() bug, 导致内存持续增加,JVM-Java内存泄漏

    我在本地用Jackson可以复现这个问题了. import java.io.IOException; import java.util.Map; import java.util.Random; im ...

  8. http一些常见知识记录

    HTTP请求包(浏览器信息) 我们先来看看Request包的结构, Request包分为3部分,第一部分叫Request line(请求行), 第二部分叫Request header(请求头),第三部 ...

  9. ffplay使用笔记

    ffplay播放yuv文件命令: ffplay -f rawvideo -video_size 1920x1080 a.yuv   ffplay播放mp4.h.264.hevc文件命令: ffplay ...

  10. 基于jQuery的2048小游戏设计(网页版)

    上周模仿一个2048小游戏,总结一下自己在编写代码的时候遇到的一些坑. 游戏规则:省略,我想大部分人都玩过,不写了 源码地址:https://github.com/xinhua6/2048game.g ...