抽象类和接口的区别以及使用场景

内容为转载,好记性不如烂笔头!!!

1. 相同点
1.两者都是抽象类,都不能实例化。
2.interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2. 不同点

1.interface需要实现,要用implements,而abstract class需要继承,要用extends。

2.一个类可以实现多个interface,但一个类只能继承一个abstract class。
3.interface强调特定功能的实现,而abstract class强调所属关系。 
4.尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现:

这个选择有两点含义:
1.Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
2.abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

5.abstract class是interface与Class的中介。
6.interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract class或Class中。 
abstract class在interface及Class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

3. interface的应用场合
1.类与类之前需要特定的接口进行协调,而不在乎其如何实现。
2.作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
3.需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
4.需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

4. abstract class的应用场合

一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
1.定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
2.某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
3.规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抽象类和接口都是Java中的抽象概念,它们的主要区别在于实现方式和使用场景。 一、抽象抽象类是一种不能被实例化的类,它的定义使用了abstract关键字。抽象类可以包含抽象方法和非抽象方法。 抽象方法是一种没有实现的方法,它的定义使用了abstract关键字。子类必须实现抽象方法才能被实例化。 非抽象方法是一种有实现的方法,它的定义没有使用abstract关键字。子类可以重写非抽象方法,也可以直接继承使用使用场景: 1.抽象类用于定义一些公共的属性和方法,被继承的子类可以实现和重写这些方法和属性,增强代码重用性和维护性。 2.抽象类可以作为一种规范、约束或标准来使用,让不同的子类去实现不同的行为或功能,提高代码的灵活性。 二、接口 接口是一种不能被实例化的纯抽象类,它的定义使用了interface关键字。接口定义了一系列的方法和常量,但没有实现。 接口中的所有方法都是抽象方法,定义使用了abstract关键字。 使用场景: 1.接口用于定义一些规范或标准,被实现的子类需要实现规定的行为或功能,提高灵活性和可维护性。 2.接口可以用于实现多重继承,一个接口可以被多个类实现,使得一个类具有更多的功能和行为。 总结: 抽象类和接口都是Java中的抽象概念,它们的主要区别在于实现方式和使用场景。 1.抽象类是一种不能被实例化的类,它的定义使用了abstract关键字。抽象类可以包含抽象方法和非抽象方法。 2.接口是一种不能被实例化的纯抽象类,它的定义使用了interface关键字。接口定义了一系列的方法和常量,但没有实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值