0
点赞
收藏
分享

微信扫一扫

Java - abstract(抽象类)& interface(接口)


Java - abstract(抽象类)& interface(接口)_抽象类

Java - abstract(抽象类)& interface(接口)_Java_02

Ps:抽象类:如果这个方法是抽象的,那么子类必须重写。除非子类也是一个抽象类。

参数

抽象类

接口

默认方法实现

它可以有方法实现

接口完全是抽象的。它根本不存在方法的实现

构造器

抽象类可以有构造器

接口不能有构造器

与正常Java类的区别

除了你不能实例化抽象类之外,它和普通Java类没有任何区别

接口是完全不同的类型

访问修饰符

抽象方法可以有publicprotecteddefault这些修饰符

接口方法默认修饰符是public。你不可以使用其它修饰符。

main方法

抽象方法可以有main方法并且我们可以运行它

接口没有main方法,因此我们不能运行它。

多继承

抽象方法可以继承一个类和实现多个接口

接口可以继承一个或多个其它接口

速度

它比接口速度要快

接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。


添加新方法


如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码


如果你往接口中添加方法,那么你必须改变实现该接口的类



选择使用接口和抽象类的依据是什么?

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

  • 抽象类表示的是:这个对象是什么。
  • 接口表示的是:这个对象能做什么。


比如1:
男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。

比如2:
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。


  1. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
  2. 接口可以多继承,抽象类不行。
  3. 接口定义方法,不能实现,而抽象类可以实现部分方法。
  4. 接口中基本数据类型为 static 而抽类象不是的。

 所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

所以,当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

Java类之间并不允许多继承,只可以单继承和实现多接口。一直以为接口也是,但是发现了下面这个(接口继承多接口) 

Java - abstract(抽象类)& interface(接口)_接口_03

  • 一个类只能 extends 一个父类,但可以 implements 多个接口。
  • 一个接口则可以同时 extends 多个接口,却不能 implements 任何接口。
  • Java中的接口是支持多继承的。

在Java类中,由于为了避免子类被引用的时候同一个方法无法判断应该使用哪个父类的方法,所以只能允许类单继承,但是,接口中的方法都是 申明 ,都没有实现方法体。所以对于接口多继承接口后,如果接口中有系统的方法申明是没有关系的,最后只会保留一个。不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢?但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。


举报

相关推荐

0 条评论