is-a( 是 "a" 小明是人类)表示的是属于得关系。比如兔子属于一种动物(继承关系)。
has-a( 有 "a" 汽车有轮胎) 表示组合,包含关系。比如兔子包含有腿,头等组件;就不能说兔子腿是属于一种兔子(不能说是继承关系)
JAVA中 什么时候用抽象类,什么时候用接口;
抽象类和接口的使用就是is和has的区别。如果就是某种玩意,比如人相对于男人,小孩,女人就是is,那么就应该是抽象类,因为他们都是人,有人所有的特点。而可行动相对于人,汽车,飞机就是has,那么就是接口,因为他们有这样的功能,但不具有is的特征。
该用接口的时候用接口.该用抽象类的时候用抽象类.
至于什么时候该,当你有一个问题.并且开始动手写解决方案时自然会明白.
因为该用接口的时候你没法用抽象类.该用抽象类的时候你没法用接口.
刚接触软件,不懂当然要问啦~~~
@吾名璇玑: 不好意思之前心情不好.我把最后一句删了吧.
学习还是要多动手不要光想.想出来的知识记不住的
@吴瑞祥: 没关系啦~~~
接口表示对象具有某种特性,是对对象特性的定义(has)。抽象类表示对某类对象行为的抽象(is)。另外JAVA支持多接口实现但是只支持单继承,项目中使用多了就慢慢有感觉了。
我觉得Aaron_li举的例子就不错.
is-a has-a
is-a( 是 "a" 小明是人类)表示的是属于得关系。比如兔子属于一种动物(继承关系)。
has-a( 有 "a" 汽车有轮胎) 表示组合,包含关系。比如兔子包含有腿,头等组件;就不能说兔子腿是属于一种兔子(不能说是继承关系)
抽象类是is-a的关系,接口是has-a;接口一般都是添加额外的功能。
抽象类与接口最大的区别在于抽象类的属性是可以继承的。
而接口只有常量。
一般情况下我们尽可能使用接口,因为接口从方法上去描述对象特性,可以实现多个接口,而继承只能继承一个。
那么我们什么时候要调用到抽象类呢?
那是因为子类必须含有父类的某个特征属性。
比如人跟鱼,人跟鱼都需要呼吸氧气作为生存的需要,这个呼吸是一个方法,所以就需要接口了。
当你需要区分人在空气中用肺呼吸,鱼在水中用鳃呼吸,那就要用到抽象类了。