黑马程序员技术交流社区
标题:
interface、 abstract class在什么时候用
[打印本页]
作者:
杨政
时间:
2012-10-20 11:40
标题:
interface、 abstract class在什么时候用
interface、 abstract class在什么时候用?特别是abstract class,不知道什么时候用
作者:
张学东
时间:
2012-10-20 11:48
interface从表面上看,和抽象类很相似,但用法完全不同。它的基本功能就是把一些毫不相关的类(概念)集合在一起形成一个新的、可集中操作的“新类”。我给学生的一个典型例子就是“司机”。谁可以当司机?谁都可以,只要领取了驾照。所以我不管你是学生,白领、蓝领还是老板,只要有驾照就是司机。
interface Driver {
Licence getDriverLicence();
}
class StudentDriver extends Student implements Driver {
}
class WhtieCollarEmployeeDriver extends WhtieCollarEmployee implements Driver {
}
class BlueCollarEmployeeDriver extends BlueCollarEmployee implements Driver {
}
class BossDriver extends Boss implements Driver {
}
复制代码
当我定义了“汽车”类后,我就可以指定“司机”了。
class Car {
setDriver(Driver driver);
}
复制代码
这时候,Car的对象并不关心这个司机到底是干什么的,他们的唯一共同点是领取了驾照(都实现了DriverLicence接口)。这个,应当是接口最强大的地方也是抽象类无法比拟的。
抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。至于他们在各个语言中的句法,语言细节并不是我关心的重点。 ”
作者:
马良
时间:
2012-10-20 13:23
首先,一个类可以实现多个接口,但是只能继承一个类,即单继承
举个例子:
interface:江湖上有许多武功,降龙十八掌,一指禅,九阴真经,一种武功你就可以把它看做一个接口,你想修炼哪个功夫就想当于去实现某个接口,这些功夫之间没有什么联系,而且你想修炼哪个就修炼哪个。
abstract class:就相当于你是少林寺门派里的一个徒弟,作为门派里的弟子,你必须要修炼本门派里所有的武功,即实现父类中的abstract方法,还可以复写父类的一般方法,但是你也可以修炼其他功夫,即去实现其他的接口。
所以,总结一下,武功可以随便学,但是门派不可以随便改,不然:身在江湖漂,天天都挨刀!!
作者:
sun~~
时间:
2012-10-20 13:47
本帖最后由 sun~~ 于 2012-10-20 14:07 编辑
声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
首先是接口程序实例:
1.public interface iFoo1{
2. //做a+b计算返回结果
3. int doPlus(int a, int b);
4. }
5.
6. public interface iFoo2{
7. //做a-b计算返回结果
8. int doMinus(int a, int b);
9. }
10.
11. public Impl implements iFoo1,iFoo2{
12. public int doPlus(int a, int b){
13. return a+b;
14. }
15. public int doMinus(int a, int b){
16. return a-b;
17. }
18. .....
19. }
抽象类实例,注意抽象类中,一个子类只能继承一个父类
1.public abstract class absFoo{
2. public void doCommon(){
3. .......
4. }
5. public abstract int doSomething();
6. }
7.
8. public class Foo extends absFoo{
9. public int doSomething(){
10. int res=0;
11. ....
12. return res;
13. }
14. }
作者:
ssx0101
时间:
2012-10-20 16:06
interface用来定义借口,供其他地方引用。
abstract class是抽象类,一般用在不希望被实例化的类上。
作者:
乔九
时间:
2012-10-20 23:37
抽象类和接口都可以被继承,不同的是,接口内的方法不能实现,需要继承的类来具体实现其方法,而抽象类中的方法可以被具体实现,并且继承的类可以重写其方法。一个类可以继承一个抽象类,但是可以继承多个接口。通常,接口被运用于实现比较常用的功能,便于日后维护或者添加删除方法,而抽象类更倾向于充当公共类的角色。不适于在日后重新对里面的代码进行修改。
作者:
张其辉
时间:
2012-10-21 01:29
interface就是接口,他其实是把一类事物的共性方法全部抽取出来而成的,比如:狗和狼都属于动物,都会吃方法,但不管吃啥,所以就把吃的方法抽取出来作为一个共性方法,只要属于动物都得实现叫这个方法。其余额外方法就和动物无关了,就是特有方法了。
abstract class是抽象类,它内部含有抽象方法和非抽象方法,比如:狗和狼都属于犬科,都会吃方法,但不管吃啥,所以把吃方法定义为犬科类的一个抽象方法,它们都会跑,所以吧跑定义为犬科类的非抽象方法,狗和狼继承了犬科就必须实现吃的方法,而吃什么自己定义方法体覆盖;但是跑方法都一样,所以他们全部具有,不需要在定义。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2