- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java编程思想之接口Java中实现多重继承
Java编程思想之接口Java中实现多重继承
1、interface不仅仅只是一个极度抽象的类,因为它允许人们通过创建一个能够被向上转型为多种基类型的类,来实现某种类似C++多重继承变种的特性。
2、像类一样,可以在interface关键字前面添加public关键字(但仅限于该接口在与其同名的文件中被定义),或者不添加它而使其只是具有包访问权限,这样它就只能在同一个包内可用。
3、可以选择在接口中显示地将方法声明为public的,但即使你不这么做,它们也是public的。因此当实现一个接口时,在接口中被定义的方法必须被定义为public。
4、Java中,在方法的继承过程中,其可访问权限不能被降低。
5、接口也可以包含字段,但是它们隐式为static和final的。
6、因为接口是根本没有任何具体实现的——也就是说,没有任何与接口相关的存储;因此,也就无法阻止多个接口的组合,也就是“多重继承”。如下例子:
[java]?view plaincopy
interface?CanFight{??
???void?fight();??
}??
interface?CanSwim{??
???void?swim();??
}??
interface?CanFly{??
???void?fly();??
}??
class?ActionCharacter{??
???public?void?fight(){??
??????System.out.println(ActionCharacter.fight());??
???}??
}??
class?Hero?extends?ActionCharacter?implements?CanFight,?CanSwim,?CanFly{??
???public?void?swim(){??
??????System.out.println(Hero.swim());??
???}??
???public?void?fly(){??
??????System.out.println(Hero.fly());??
???}??
???/**1.注意CanFight中的fight()方法并没在这里定义?
????*?2.这是因为CanFight接口与ActionCharacter类中的fight()方法的特征签名是一样的。?
????*?3.所以即使Hero没有显式地提供fight()的定义,其定义也因ActionCharacter而随之而来。?
????*?4.若把ActionCharacter的fight()改为private,就会出现提示说?
????*???“类型?Hero必须实现继承的抽象方法?CanFight.fight()”的错误。?
????*?5.若把ActionCharacter的fight()改为private,就会出现提示说?
????*???“继承的方法?ActionCharacter.fight()不能隐藏?CanFight中的公用抽象方法”的错误。?
????*/??
????
}??
public?class?Adventure{??
???public?static?void?t(CanFight?x){x.fight();}??
???public?static?void?u(CanSwim?x){x.swim();}??
???public?static?void?v(CanFly?x){x.fly();}??
???public?static?void?w(ActionCharacter?x){x.fight();}??
???public?static?void?main(String[]?args){??
??????Hero?h?=?new?Hero();??
??????t(h);??
??????u(h);??
??????v(h);??
??????w(h);??
???}??
}??
运行结果:
1).注意CanFight中的fight()方法并没有在Hero定义
2).这是因为CanFight接口与ActionCharacter类中的fight()方法的特征签名是一样的。
3).所以即使Hero没有显式地提供fight()的定义,其定义也因ActionCharacter而随之而来。
4).若把ActionCharacter的fight()改为private,就会出现提示说“类型 Hero必须实现继承的抽象方法CanFight.fight()”的错误。
5).若把ActionCharacter的fight()改为private,就会出现提示说“继承的方法 ActionCharacter.fight()不能隐藏CanFight中的公用抽象方法”的错
您可能关注的文档
最近下载
- 认识常见中草药.ppt
- 注册可靠性工程师模拟试题3.pdf VIP
- 生猪屠宰兽医卫生检验人员理论考试题及答案.doc VIP
- 福彩3D历史数据EXCEL自动更新.xls VIP
- 期中复习备考Unit1-unit6话题补全对话 人教版九年级英语全册.docx VIP
- 注册可靠性工程师模拟试题6.pdf VIP
- 2019年第十三届全国大学生化工设计竞赛作品江汉大学年产89万吨醋酸乙烯酯生产项目设计文档3-VAC初步设计说明书.docx VIP
- 注册可靠性工程师模拟试题2.pdf VIP
- 译林牛津版小学五年级上册英语阅读理解练习题含答案解析.pdf VIP
- 注册可靠性工程师模拟试题8.pdf VIP
文档评论(0)