当前位置: 技术问答>java相关
abstract class 和 interface class 的区别
来源: 互联网 发布时间:2015-05-30
本文导语: 我在think in java中看到这样一段话,不太明白,请大侠指点: “亦可用abstract关键字描述一个尚未实现的方法——作为一个“根”使用,指出:“这是适用于从这个类继承的所有类型的一个接口函数,但目前尚没有对...
我在think in java中看到这样一段话,不太明白,请大侠指点:
“亦可用abstract关键字描述一个尚未实现的方法——作为一个“根”使用,指出:“这是适用于从这个类继承的所有类型的一个接口函数,但目前尚没有对它进行任何形式的实现。”抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类也会变成“抽象”类。通过创建一个抽象方法,我们可以将一个方法置入接口中,不必再为那个方法提供可能毫无意义的主体代码。
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相当有效和常用的工具。另外如果自己愿意,亦可将多个接口都合并到一起(不能从多个普通class或abstract class中继承)。”
我的理解:在abstract class中可以实作函数,但函数中没有实现,interface class中不可以实作函数,那要它有什么用,难道只为了有一个接口名,它在什么时候才会用到?
“亦可用abstract关键字描述一个尚未实现的方法——作为一个“根”使用,指出:“这是适用于从这个类继承的所有类型的一个接口函数,但目前尚没有对它进行任何形式的实现。”抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类也会变成“抽象”类。通过创建一个抽象方法,我们可以将一个方法置入接口中,不必再为那个方法提供可能毫无意义的主体代码。
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相当有效和常用的工具。另外如果自己愿意,亦可将多个接口都合并到一起(不能从多个普通class或abstract class中继承)。”
我的理解:在abstract class中可以实作函数,但函数中没有实现,interface class中不可以实作函数,那要它有什么用,难道只为了有一个接口名,它在什么时候才会用到?
|
共同切磋!
我觉得可以这样理解抽象类和接口:
首先,采用他们都是为了禁止生成该类的实例,作为一个父类使用;
第二,抽象类中可以有成员变量,可以有抽象方法(需要继承他的子类去实现,如果他的子类没有实现该抽象方法,则该子类也必须是个抽象类!),也可以有带有方法实体的方法;
而在接口中,只定义一些公共的方法名及其参数列表(同样需要实现(其实就是继承)他的类去实现,也同样如果实现他的类没有实现接口中定义的方法,则此类也必须是个抽象类!)。接口中没有成员变量,但它可以定义常量(必须初始化),但一般不这样做(除非一定要用接口进行常量管理),以保证接口的整洁。
第三,由于java中的单继承性,所以要想实现多重继承,只能由接口去实现。
所以,抽象类和接口适用的原则是:大多数情况下,应该首选接口去实现,除非确实需要带有成员变量(或是带有方法实体的方法),再选择抽象类。
我觉得可以这样理解抽象类和接口:
首先,采用他们都是为了禁止生成该类的实例,作为一个父类使用;
第二,抽象类中可以有成员变量,可以有抽象方法(需要继承他的子类去实现,如果他的子类没有实现该抽象方法,则该子类也必须是个抽象类!),也可以有带有方法实体的方法;
而在接口中,只定义一些公共的方法名及其参数列表(同样需要实现(其实就是继承)他的类去实现,也同样如果实现他的类没有实现接口中定义的方法,则此类也必须是个抽象类!)。接口中没有成员变量,但它可以定义常量(必须初始化),但一般不这样做(除非一定要用接口进行常量管理),以保证接口的整洁。
第三,由于java中的单继承性,所以要想实现多重继承,只能由接口去实现。
所以,抽象类和接口适用的原则是:大多数情况下,应该首选接口去实现,除非确实需要带有成员变量(或是带有方法实体的方法),再选择抽象类。
|
我觉得应该这样理解接口的作用,你知道,JAVA中只有单继承,即每个类只能有一个父类(超类),当我们想同时用到两个类的方法时,想都继承是不可能的,这时候接口的作用就体现出来了:我们可以根据继承关系确定该继承哪个类,然后在实现需要用到的那个类的接口。
举个最简单的例子:现在有“人”和“鸟”两个类,如果我想创造“超人”这个类,我就应该继承“人”,然后实现“鸟”的接口,达到会飞的目的。你觉得呢?:)
举个最简单的例子:现在有“人”和“鸟”两个类,如果我想创造“超人”这个类,我就应该继承“人”,然后实现“鸟”的接口,达到会飞的目的。你觉得呢?:)
|
我觉得应该是先学JAVA,有一些JAVA的基础后,再学JSP,因为后者需要前者作为基础
|
interface is not for multi-inheritance at all!
what can you inherit anyway? It does not have any implementation.
Treat interface as a protocol, as a data type.
for example, in function
kill(Person p)
{
p.die();
}
you really don't care how the Person is implemented, as long as it supports the die() method.
So it make sense to have Person as an interface.
what can you inherit anyway? It does not have any implementation.
Treat interface as a protocol, as a data type.
for example, in function
kill(Person p)
{
p.die();
}
you really don't care how the Person is implemented, as long as it supports the die() method.
So it make sense to have Person as an interface.