开发者社区> 问答> 正文

[@墨玖tao][¥20]JAVA中接口和抽象类的区别

公西焕舒 2018-10-29 23:47:32 488

如题,JAVA中接口和抽象类的区别。

Java
分享到
取消 提交回答
全部回答(4)
  • xwaby
    2019-07-17 23:10:57

    1.语法层面上的区别:
    1)抽象类可以有普通成员方法,接口只能有抽象方法。
    2)抽象类中的变量可以是任意的,但是接口中的变量只能是public static final来修饰的
    3)抽象类中可以有静态方法和静态代码块,但是接口中不能有静态代码块或者是静态方法
    4)抽象类是单继承的但是接口是多实现的
    2.设计层面上的区别:
    抽象类是对事务整体的抽象,而接口只是对行为的抽象。比如说汽车和火车都能抽象为一个类,他们都有行驶的功能,我们可以把行驶作为一个接口,用汽车和货车来实现这个接口。抽象类描述的是”是不是“,而接口描述的是”有没有“。

    0 0
  • hiekay
    2019-07-17 23:10:56

    抽象类和接口的区别:

    默认的方法实现 
    抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现。
    抽象类中可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象方法),因为存在抽象方法,所以该类必须是抽象类。但是接口要求只能包含抽象方法,抽象方法是指没有实现的方法。所以就不能像抽象类那么无赖了,接口就根本不能存在方法的实现。

    实现 抽象类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。
    抽象类虽然不能实例化来使用,但是可以被继承,让子类来具体实现父类的所有抽象方法。有点老子没完成的梦想交给儿子来完成,但是如果子类将抽象方法没有全部实现,就必须把自己也修饰成抽象类,交于继承它的子类来完成实现。就相当于,儿子能力不够也没完成老爹的梦想,现在儿子等着再生儿子(被继承),然后让孙子去完成。以此类推,知道没有抽象函数。

    接口的实现,通过implements关键字。实现该接口的类,必须把接口中的所有方法给实现。不能再推给下一代。和抽象类相比,抽象类是将梦想传给家族,一代一代去完成。那么接口就是掌门人找大师兄来完成帮派的鸿星伟业,这时候就只有一次希望,要么有能力就实现,没能力就不要接。

    抽象类可以有构造器,而接口不能有构造器
    这个原因很简单,我们回到双方的定义上来,抽象类再怎么流氓无赖也好,终究是属于类,就天生享有类的所有特性(但是不能实例化),当然包括类的构造方法,也就是构造器。

    但是接口是所有抽象方法的集合,注意,是集合,不是类。当然没有构造方法一说,更别提什么构造器了。

    抽象方法可以有public、protected和default这些修饰符 
    接口方法默认修饰符是public。你不可以使用其它修饰符。
    抽象类的目的就是被继承,抽象方法就是为了被重写,所以肯定不能用private修饰符,肯定是可以用public的。但是protected和default也是可以的。

    接口就有且只有一个public修饰。

    (是不是感觉抽象类像小儿子各种耍无赖,接口就像私生子,说什么只能是什么)

    抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。
    java在类的继承上并没有多继承。抽象类属于类,所以可以被继承。但子类只能继承一个父类。java为了实现多继承,使用了接口。一个类可以实现多个接口。继承就好比生了孩子,只能有一个爹,但是这个孩子可以学语文,学数学,学英语等等很多东西,而语文、数学、英语就相当于接口。

    总的来说,因为java中抽象类只有单继承,接口就可以实现多继承。

    抽象方法比接口速度要快
    接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
    记住抽象方法是小儿子,从小吃的好所以跑的快,接口是私生子,从小日子苦,营养不良。

    如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。
    抽象类可以有一些非抽象方法的存在,这些方法被称为默认实现。如果添加一个默认实现方法(不能是抽象方法),就不需要在子类中去实现,所以继承这个抽象类的子类无须改动。

    但是,接口中只能添加抽象方法,当你添加了抽象方法,实现该接口的类就必须实现这个新添加的方法。因为,定义中说的很清楚,接口的实现必须实现所有的方法。所有,当然包括新添加的方法。

    0 0
  • 千狼
    2019-07-17 23:10:56

    抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

    接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

    0 0
添加回答

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题