java interface接口和多继承
2012-10-30 20:53
387 查看
转载自:http://blog.csdn.net/lizzywu/article/details/4005295
很长时间不能很好解释多继承,今天看到一个特别好的解释,大快!
![](http://shared.live.com/HjKMzTS-xzcms40!CabizA/emoticons/smile_teeth.gif)
以下是引用:
我认为你好像是不明白接口怎么用?也就是不明白为什么要定义那么多接口然后再用类去一个个继承他们。我跟你举个游戏的例子吧:
这里有一个游戏,人猿泰山。
主角是一个单独的类,这里我们主要用怪物说明接口的用法:
怪物有很多种,
按地域分:有的在天上飞,有的在地上跑,有的在水里游
按攻击方式分:有的能近距离物理攻击,有的能远距离射击
假设游戏里需要这样的几种怪——
野狗:地上移动,近距离攻击
黑熊:地上移动,近/远距离攻击
秃鹫:地上/天上移动,远距离攻击
食人鱼:水中移动,近距离攻击
鳄鱼:地上/水中移动,近距离攻击
显然,如果我们将每一种怪物定义为一个类,那就不是面向对象的程序开发了,我们应当使用接口:
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
}
}
在实现接口方法的同时,也拥有了接口中定义的成员变量,这样就构成了一个有机的整体,使整个程序既体现了类的多样性,又不失结构组合的灵活性,且需要在某个特性增加其他功能,只要修改接口就可以了,其继承的类自动修改。
很长时间不能很好解释多继承,今天看到一个特别好的解释,大快!
![](http://shared.live.com/HjKMzTS-xzcms40!CabizA/emoticons/smile_teeth.gif)
以下是引用:
我认为你好像是不明白接口怎么用?也就是不明白为什么要定义那么多接口然后再用类去一个个继承他们。我跟你举个游戏的例子吧:
这里有一个游戏,人猿泰山。
主角是一个单独的类,这里我们主要用怪物说明接口的用法:
怪物有很多种,
按地域分:有的在天上飞,有的在地上跑,有的在水里游
按攻击方式分:有的能近距离物理攻击,有的能远距离射击
假设游戏里需要这样的几种怪——
野狗:地上移动,近距离攻击
黑熊:地上移动,近/远距离攻击
秃鹫:地上/天上移动,远距离攻击
食人鱼:水中移动,近距离攻击
鳄鱼:地上/水中移动,近距离攻击
显然,如果我们将每一种怪物定义为一个类,那就不是面向对象的程序开发了,我们应当使用接口:
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
}
}
在实现接口方法的同时,也拥有了接口中定义的成员变量,这样就构成了一个有机的整体,使整个程序既体现了类的多样性,又不失结构组合的灵活性,且需要在某个特性增加其他功能,只要修改接口就可以了,其继承的类自动修改。
相关文章推荐
- java interface接口和多继承
- Java中的接口Interface是不是继承自Object?+ 复习基本概念
- Java中的接口interface实现、与继承extends机制。
- JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac
- 【Java面试题】13 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- Java -- 获取指定接口的所有实现类或获取指定类的所有继承类
- 【黑马程序员】----java基础---继承、抽象、接口
- java 中不能继承多个父类,除非本身和父类都是接口
- 黑马程序员——Java基础---面向对象(封装、继承、单例、抽象类、接口、内部类)
- JAVA的Interface观念与C++多重继承的比较
- java 继承与多态之抽象类和接口
- 黑马程序员_面向对象2_(继承、多态、抽象类abstract、接口interface、内部类)
- java Thread学习-Thread的实现方法 继承Thread,实现Runnable 接口
- Java之抽象(abstract)类、接口(interface)的用法总结
- Java的类(class)、包(package)和接口(interface)
- java 继承 多态 虚拟类 接口 异常 线程 内部类
- java总结(之五)-- 类与接口、多态与继承
- Java中继承thread类与实现Runnable接口的不同之处
- javaee学习日记之java基础之接口,继承,抽象类