Java抽象类

    xiaoxiao2023-03-24  3

    抽象类的概念:

    在面向对象的概念中,所有的对象都是通过类来描述的,但是并不是所有的类都是用来实例化对象的,有些类是用来抽象化概念的,抽象类往往是用来表征对问题领域进行分析设计所得到的抽象的概念,是对一系列看上去有差异,但是本质上相同的一系列的具体概念的抽象。

    举个例子: 比如,在一个图形编辑软件的分析设计过程中,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个抽象概念,形状这个概念在问题领域并不是直接存在的,它就是一个抽象概念。而正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

    在Java中,含有抽象方法的类叫做抽象类,但是并不是每一个抽象类都必须含有抽象方法,不能实例化对象,主要作用是类型隐藏和充当全局变量的角色。


    抽象类的语法特点

    1 含有抽象方法的类必须用abstract修饰成为抽象类,不包含抽象方法也可以加abstract抽象成抽象类来禁止该类的所有实例。

    2 如果想继承一个抽象类并想实例化,就要实现该抽象类的所有的抽象方法。

    3 如果实现类没有实现超类所有的抽象方法,那会被强制加上abstract使该类抽象。

    4 (类型隐藏)能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。


    和接口对比

    语法定义层

    1 接口只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的;抽象类除了接口中有的还可以有自己的数据成员,也可以有非abstract的成员方法。

    2 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。 接口中的方法默认修饰符是public abstract。抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

    编程层面

    abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

    设计理念层面

    abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在”is a“关系,即父类和派生类在概念本质上应该是相同的。 对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约(功能、方法)而已,接口和实现类是“like a”的关系;


    部分内容摘自网络,只做学习用,侵删

    转载请注明原文地址: https://ju.6miu.com/read-1201003.html
    最新回复(0)