标签:java
这一章节我们来说一下接口另一个特性:多重接口。
在平常,使用继承,我们只是继承某一类,只能够一种向上转型,但是在接口的使用方面,可以实现多个接口,然后实现多种的向上转型。
我们先上代码:
package com.ray.ch07; public class Test { public static void testSwim(CanSwim canSwim) { canSwim.swim(); } public static void testEat(CanEat canEat) { canEat.eat(); } public static void testRun(CanRun canRun) { canRun.run(); } public static void main(String[] args) { Person person = new Person(); testSwim(person);//向上转型为CanSwim testEat(person);//向上转型为CanEat testRun(person);//向上转型为CanRun Fish fish = new Fish(); testSwim(fish);// // testEat(fish);//error,因为没有实现接口,不能向上转型 // testRun(fish);//error,因为没有实现接口,不能向上转型 } } interface CanRun { void run(); } interface CanSwim { void swim(); } interface CanEat { void eat(); } class Person implements CanEat, CanRun, CanSwim { @Override public void swim() { System.out.println("i can swim"); } @Override public void run() { System.out.println("i can run"); } @Override public void eat() { System.out.println("i can eat"); } } class Fish implements CanSwim { @Override public void swim() { System.out.println("i can swim"); } }
解释一下上面的代码:
1.建立了三个接口:会游泳,会跑,会吃
2.建立一个Person类,实现上面三个接口
3.建立一个Fish类,只是实现游泳的接口
4.然后在测试代码里面使用策略设计模式,测试一下三种技能
在代码里,Person 分别向上转型为CanRun、CanSwim、CanEat这三种类型,这样大大增强代码的灵活性,要不然我们就必须在测试代码方面增加代码,才能够完整测试。而且也不利于代码的复用,假如CanSwim这个不是接口,他变成了基类,但是他的实现可能对于Person或者Fish来说都是不合适的,而且代码可能歧义,但是现在是接口,只是一种协议,说明子类只是具备某种功能,而这个功能怎么实现,具体需要根据子类的实现来说,这样代码更能够广泛的复用。
总结:这一章节主要讲述了接口的多重实现,以及他的灵活性。
这一章节就到这里,谢谢。
-----------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:java
原文地址:http://blog.csdn.net/raylee2007/article/details/49724327