JAVA的抽象类和接口

本文探讨了接口和抽象类在面向对象编程中的作用,抽象类用于定义子类的共同特征,不能直接实例化。接口则强调对象的行为,提供了一种定义多个无关类共同行为的方式。虽然两者都能实现多态性,但一个类只能继承一个抽象类,而可以实现多个接口。Java8以后,接口还可以包含默认方法和静态方法,增强了其灵活性。选择使用抽象类还是接口,取决于类之间的is-a关系强度和所需的行为定义。
摘要由CSDN通过智能技术生成

一、接口和抽象类概述

抽象类:在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父,类追溯,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(abstract class)。

抽象类的几点说明:

1.抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。换句话说,在继承自抽象类的非抽象子类中,必须实现所有的抽象方法。还要注意到,抽象方法是非静态的。

2.抽象类不能使用new操作符来初始化。但是,仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用。例如, Geometricobject类的构造方法在Circle类和Rectange类中调用。

3.包含抽象方法的类必须是抽象的。然而,可以定义一个不包含抽象方法的抽象类。这个抽象类用于作为定义新子类的基类。

4.子类可以重写父类的方法并将它定义为抽象的。这很少见,但是它在当父类的方法实现在子类中变得无效时是很有用的。在这种情况下,子类必须定义为抽象的。

5.即使子类的父类是具体的,这个子类也可以是抽象的。例如, object类是具体的,但是它的子类如Geometricobject可以是抽象的。

6.不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。

接口:接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的对象的共同行为。在Java中,接口被看作是一种特殊的类。就像常规类一样,每个接口都被编译为独立的字节码文件。使用接口或多或少有点像使用抽象类。例如,可以使用接口作为引用变量的数据类型或类型转换的结果等。与抽象类相似,不能使用new操作符创建接口的实例。 

二、抽象类和接口的不同

定义的不同:如下图(取自别人的文章,有删除需要请告知)

三、总结

        接口和抽象类都可以用于为对象指定共同的行为。如何决定是采用接口还是类呢?通常,比较强的is-a (是一种)关系清晰地描述了父子关系,应该采用类来建模。例如,因为橘子是一种水果,它们的关系就应该采用类的继承关系来建模。弱的is-a关系,也称为iskind-of (是一类)关系,表明一个对象拥有某种属性。弱的is-a关系可以使用接口建模。例,如,所有的字符串都是可以比较的,因此String类实现了Comparable接口。圆或者矩形是一个几何对象,因此Circle可以设计为Geometricobject的子类。圆有不同的半径,并且可以基于半径进行比较,因此Circle可以实现Comparable接口。接口比抽象类更加灵活,因为一个子类只能继承一个父类,但是却可以实现任意个数的接口。然而,接口不能包含数据域。Java 8中,接口可以包含默认方法和静态方法,这对简化类的设计非常有用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值