我所理解的接口和抽象类

参考:http://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html


在实践过程中,抽象类和接口都经常用到。但是,对于什么情况下该用抽象类,什么情况下该用接口,总是有点搞不清楚。

于是,在阅读别人对着两者理解之后,终于对两者的区别有了更进一步的理解。

有关这两者的一些基本区别,可以参考上面的文章。这里我只介绍下对于抽象和接口该在什么情况下使用的理解。

抽象类重点在于对于属性和方法的继承;而接口则重在多个类(可能他们之间毫无联系)对同一种方法或者属性的描述,体现了多态性。


抽象出一个类(类),定义一个抽象方法(判断是否会飞)

1、抽象类

例如:抽象出一个鸟类。对于鸟类,抽象出一个方法。用来判断这种鸟会不会飞。

由于鸟类中的canFly是抽象方法,因此所有继承鸟类的子类都必须实现这个canFly方法。

/**
 * 鸟
 */
public abstract class Bird {

	public abstract boolean canFly();
}

/**
 * 燕子
 * 
 */
public class Swallow extends Bird{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}


}

/**
 * 猫头鹰
 *
 */
public class Owl extends Bird{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}

}

假如现在有这种状况。要同时描述鸟类和飞机,它们可以有一个共同的方法来判断是否能飞。但是这个时候,两者肯定是没有继承关系的啦。

你不能指望飞机通过继承鸟类来获得这个canFly的方法。

此时,你就可以把canFly抽象到接口中,然后鸟类和飞机都继承这个接口。

2、接口

public interface IFly {
	public abstract boolean canFly();
}

/**
 * 鸟
 */
public class Bird implements IFly{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}

}

/**
 * 飞机
 *
 */
public class Airplane implements IFly {

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return true;
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值