java interface接口和多继承[通俗易懂]

java interface接口和多继承[通俗易懂]很长时间不能很好解释多继承,今天看到一个特别好的解释,大快! 以下是引用:我认为你好像是不明白接口怎么用?也就是不明白为什么要定义那么多接口然后再用类去一个个继承他们。我跟你举个游戏的例子吧:这里有一个游戏,人猿泰山。主角是一个单独的类,这里我们主要用怪物说明接口的用法:怪物有很多种,按地域分:有的在天上飞,有的在地上跑,有的在水里游按攻击方式分:有的能近距离物理攻击,有的能

大家好,又见面了,我是你们的朋友全栈君。

很长时间不能很好解释多继承,今天看到一个特别好的解释,大快!
大笑
 
以下是引用:
我认为你好像是不明白接口怎么用?也就是不明白为什么要定义那么多接口然后再用类去一个个继承他们。我跟你举个游戏的例子吧:

这里有一个游戏,人猿泰山。

主角是一个单独的类,这里我们主要用怪物说明接口的用法:

怪物有很多种,

按地域分:有的在天上飞,有的在地上跑,有的在水里游

按攻击方式分:有的能近距离物理攻击,有的能远距离射击

假设游戏里需要这样的几种怪——

野狗:地上移动,近距离攻击

黑熊:地上移动,近/远距离攻击

秃鹫:地上/天上移动,远距离攻击

食人鱼:水中移动,近距离攻击

鳄鱼:地上/水中移动,近距离攻击

显然,如果我们将每一种怪物定义为一个类,那就不是面向对象的程序开发了,我们应当使用接口:

interface OnEarth{//陆地接口

int earthSpeed;//陆地移动速度

void earthMove();//陆地移动方法

}

interface OnWater{//水中接口

int waterSpeed;//水中移动速度

void waterMove();//水中移动方法

}

interface OnAir{//空中接口

int airSpeed;//水中移动速度

void airMove();//水中移动方法

}

interface NearAttack{//近距离攻击接口

int nearAttackPower;//近距离攻击力

void nearAttack();//近距离攻击方法

}

interface FarAttack{//远距离攻击接口

int farAttackPower;//远距离攻击力

void farAttack();//远距离攻击方法

}

这样一来,根据需求,我们可以选择性的继承接口:

class Tyke implements OnEarth, NearAttack{//野狗类

void earthMove(){//实现继承的方法1

}

void nearAttack(){//实现继承的方法2

}

}

class BlackBear implements OnEarth, NearAttack, FarAttack{//黑熊类

void earthMove(){//实现继承的方法1

}

void nearAttack(){//实现继承的方法2

}

void farAttack(){//实现继承的方法3

}

}

class Vulture implements OnEarth, OnAir, FarAttack{//秃鹫类

void earthMove(){//实现继承的方法1

}

void airMove(){//实现继承的方法2

}

void farAttack(){//实现继承的方法3

}

}

class ManeatFish implements OnWater, NearAttack{//食人鱼类

void waterMove(){//实现继承的方法1

}

void nearAttack(){//实现继承的方法2

}

}

class Crocodile implements OnEarth, OnWater, NearAttack{//鳄鱼类

void earthMove(){//实现继承的方法1

}

void waterMove(){//实现继承的方法2

}

void nearAttack(){//实现继承的方法3

}

}

在实现接口方法的同时,也拥有了接口中定义的成员变量,这样就构成了一个有机的整体,使整个程序既体现了类的多样性,又不失结构组合的灵活性,且需要在某个特性增加其他功能,只要修改接口就可以了,其继承的类自动修改。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160485.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IntelliJ IDEA常用快捷键汇总

    IntelliJ IDEA常用快捷键汇总在使用IntelliJIdea的时候,使用快捷键是必不可少的。掌握一些常用的快捷键能大大提高我们的开发效率。有些快捷键可以熟练的使用,但是还有另外一些快捷键虽然很好用,但是由于因为没有形成使用习惯或者没有理解快捷键的用法,甚至之前对一些快捷键根本没有概念,导致不会去使用。对于这些快捷键,如果能够用好,编辑代码的效率必能提高一个水平。所以在此梳理出来,加强自己的使用,形成习惯。(注:有些操作的快捷键

    2022年5月15日
    57
  • JavaWeb开发与代码的编写(一)[通俗易懂]

    JavaWeb开发与代码的编写(一)[通俗易懂]JavaWeb开发与代码的编写(一)绝对路径与相对路径在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下:一、使用${pageContext.request.contextPath}  代码”${pageContext.request.contextPath}”的作用是取出部署的应用…

    2022年7月8日
    21
  • Spring boot zuul 网关「建议收藏」

    Spring boot zuul 网关「建议收藏」Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态的路由、过滤、监控、弹性伸缩和安全。其中Zuul、Ribbon以及Eureka的结合使用可以实现智能路由和负载均衡的功能,网关将所有的服务的API接口统一聚合,统一对外暴露,外界调用API的接口的时候,不需要知道微服务系统中各服务相关调用的复杂性,保护了内部微服务单元的API接口,网关可以做用户身份认证和权限认证,防止非法请求操作a…

    2022年8月15日
    7
  • python fabric实现远程操作和部署

    python fabric实现远程操作和部署

    2021年12月4日
    45
  • mediumtext_MySQL中tinytext、text、mediumtext和longtext等各个类型详解【图】

    mediumtext_MySQL中tinytext、text、mediumtext和longtext等各个类型详解【图】MySQL中tinytext、text、mediumtext和longtext等各个类型详解【图】07-29栏目:技术TAG:mediumtextmediumtext一、字符串类型www.jhua.org类型www.jhua.org范围https://www.jhua.org说明www.jhua.orgChar(N)[binary]N=1~255个字节jhua.orgbinary:分…

    2022年5月2日
    42
  • 【python】获取当前时间戳

    【python】获取当前时间戳importtime 获取当前时间 times datetime now strftime Y m d H M S printtimes 转为时间数组 timeArray time strptime times Y m d H M S 转为时间戳 timeStamp int time mktime timeArray printtimeSta 结果 个人网站 沉默博客如有错误 请多多指教 如对你有帮助

    2025年7月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号