从头认识java-7.5 怎样通过继承扩展接口?

我们这一章节来讨论一下怎样通过继承扩展接口。

接口跟类一样,具有继承的特性,但是他只是继承接口,不继承类。

package com.ray.ch07;

interface WhatPersonCanDo {
	void run();

	void sleep();
}

interface WhatSingerCanDo extends WhatPersonCanDo {
	void sing();
}

class Singer implements WhatSingerCanDo {

	@Override
	public void run() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sing() {
		// TODO Auto-generated method stub

	}
}


从上面的代码可以看出,WhatSingerCanDo继承了WhatPersonCanDo,使得Singer在实现WhatSingerCanDo接口的时候,需要重写三个方法。

 

虽然通过继承可以对接口进行扩展,但是,需要注意的是不同接口定义相同名称的方法这一混淆点。

因为不同的接口定义了相同标签的方法,而且看上去还是重写覆盖的样子,这个时候就会使得可读性大大降低。

当然,这一点可能在实际编程里面稍微少见,但是也是可能出现的注意点。

下面是一个错误的代码,无论怎么注释都是错误,下面注释里面注解了一些错误。

package com.ray.ch07;

interface interface1 {
	void run();
}

interface interface2 {
	void run(int speed);

}

class father {
	public int run(int speed) {
		return speed;
	}
}
/**
 * The return types are incompatible for the inherited methods interface2.run(int), father.run(int)
 */
class Test extends father implements interface1, interface2 {//error

	/**
	 * Multiple markers at this line - The return type is incompatible with
	 * father.run(int) - overrides com.ray.ch07.father.run - Duplicate method
	 * run(int) in type Test
	 */
	// @Override
	// public void run(int speed) {
	// }

	/**
	 * Multiple markers at this line - The return type is incompatible with
	 * interface2.run(int) - overrides com.ray.ch07.father.run
	 */
	// @Override
	// public int run(int speed) {
	// }

	@Override
	public void run() {
	}
}


 

当然,出现上面的这种情形是非常少见的,因为现在大部分的编程人员都使用框架,而且都是单继承和单接口,但是我们还必须注意这点。

 

这一章节就到这里,谢谢。

-----------------------------------

目录


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值