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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php 全部替换字符串,php如何批量替换字符串

    php 全部替换字符串,php如何批量替换字符串php如何批量替换字符串2020-10-0614:54:06php批量替换字符串的方法:使用【str_replace】批量查找替换字符串,代码为【$str=str_replace(‘o’,’O’,$str,$count);echo$str.PHP_EOL;】。php批量替换字符串的方法:str_replace批量查找替换字符串…

    2022年5月10日
    44
  • mysql分页查询limit用法(怎么对文档进行分页)

    一、分页需求:客户端通过传递start(页码),pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limitm,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:比如:查询第1条到第10条的数据的sql是:select*fromtablelimit0,…

    2022年4月11日
    87
  • Qt的4种多线程实现方式

    Qt的4种多线程实现方式一 QThread 类的 run 一 实现方法 新建一个集成 QThread 的类 重写虚函数 run 通过 run 启动线程二 示例 include QThread include QDebug classMyThrea publicQThrea Q OBJECTprotec voidrun dosomethingq lt lt FUNCTION lt amp QDebug QThread

    2025年11月3日
    3
  • 数据库中存储过程语法

    数据库中存储过程语法数据库中存储过程语法本文主要总结在数据库中存储过程的语法:存储过程的创建存储过程的删除参数的使用变量的声明if条件语句语法casewhen条件语句语法循环语句语法存储过程的创建创建语法如下:@authorbyliucreateprocedurename(in[param1]type,…,out[params]type)beginsql语句1;

    2022年7月17日
    14
  • Java 基础知识总结(下)-王者笔记《收藏版》

    Java 基础知识总结(下)-王者笔记《收藏版》上一篇Java基础知识学习总结之(上)目录三、计算机原理和操作系统内存、CPU、硬盘?Linux基本命令线程和进程的区别?四、数据库基础关系型数据库和非关系型数据库有哪些区别?举例说明数据库索引是做什么用的什么情况需要给字段建立索引?什么情况下索引会失效?慢查询是什么?主从库…

    2022年6月9日
    27
  • LiveWriter高亮显示方法专题「建议收藏」

    LiveWriter高亮显示方法专题「建议收藏」2013年9月26日花了一上午的时间,熟悉了LiveWriter的用法,学会了怎么配置语法高亮,总结下来。方法1.用博客园推荐的方法没有成功。pass方法2方法来自一个人的旅行.试过OK博客

    2022年7月2日
    28

发表回复

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

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