当前位置:  技术问答>java相关

abstract class 和 interface class 的区别

    来源: 互联网  发布时间:2015-05-30

    本文导语:  我在think in java中看到这样一段话,不太明白,请大侠指点: “亦可用abstract关键字描述一个尚未实现的方法——作为一个“根”使用,指出:“这是适用于从这个类继承的所有类型的一个接口函数,但目前尚没有对...

我在think in java中看到这样一段话,不太明白,请大侠指点:
“亦可用abstract关键字描述一个尚未实现的方法——作为一个“根”使用,指出:“这是适用于从这个类继承的所有类型的一个接口函数,但目前尚没有对它进行任何形式的实现。”抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类也会变成“抽象”类。通过创建一个抽象方法,我们可以将一个方法置入接口中,不必再为那个方法提供可能毫无意义的主体代码。
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相当有效和常用的工具。另外如果自己愿意,亦可将多个接口都合并到一起(不能从多个普通class或abstract class中继承)。”

我的理解:在abstract class中可以实作函数,但函数中没有实现,interface class中不可以实作函数,那要它有什么用,难道只为了有一个接口名,它在什么时候才会用到?



|
共同切磋!
我觉得可以这样理解抽象类和接口:
首先,采用他们都是为了禁止生成该类的实例,作为一个父类使用;
第二,抽象类中可以有成员变量,可以有抽象方法(需要继承他的子类去实现,如果他的子类没有实现该抽象方法,则该子类也必须是个抽象类!),也可以有带有方法实体的方法;
而在接口中,只定义一些公共的方法名及其参数列表(同样需要实现(其实就是继承)他的类去实现,也同样如果实现他的类没有实现接口中定义的方法,则此类也必须是个抽象类!)。接口中没有成员变量,但它可以定义常量(必须初始化),但一般不这样做(除非一定要用接口进行常量管理),以保证接口的整洁。
第三,由于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.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.lang.model.element枚举modifier的类成员方法: abstract定义及介绍
  • 关于abstract和final的问题
  • java命名空间java.lang.reflect类modifier的类成员方法: abstract定义及介绍
  • 解析abstract与override究竟可不可以同时使用
  • 突然想到一个奇怪的问题:如果一个非abstract类中包含一个空方法体(及非Java代码写的方法体是空的)的native方法,编译会通过吗?
  • java开源软件 iis7站长之家
  • 深入理解C# abstract和virtual关键字
  • C# 设计模式之Abstract Factory 抽象工厂(概念)
  • Java修饰符 abstract,static,final 的区别详解
  • 谁用过CachedRowSet的?abstract不可初始化问题。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3