一、Java语言的四大特性即是:抽象封装、继承、多态


抽象:

    将一类对象的共同特征总结出来,包括数据抽象和行为抽象两方面。

    抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。


封装:

    把属于同一类事物的共性(包括属性与方法)归到一个类中,

    隐藏信息,同时保留一些对外接口使之与外部发生联系。


继承:

    基于已有的类,构造一个新类。

    在java中通过关键字extends继承一个已有的类,

    被继承的类称为父类(超类,基类),新的类称为子类(派生类)。

    Java只允许单继承,且不能调用父类私有属性和私有方法及私有构造方法(拥有但不能调用)。


多态:

    理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。


    多态就是在抽象的层面上实施一个统一的行为,到个体(具体)的层面上时,这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为。

    子类以父类的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的,是安全的,但向下转型(downcast)是不安全的,需要强制转换。子类以父类的身份出现时自己特有的属性和方法将不能使用。



二、接口&抽象类


    抽象类是一种功能不全的类,

    接口只是一个抽象方法声明和静态不能被修改的数据的集合,

    两者都不能被实例化。


Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:

  • 接口中所有的方法隐含的都是抽象的。
    而抽象类则可以同时包含抽象和非抽象的方法。

  • 类可以实现很多个接口,但是只能继承一个抽象类

  • 类如果要实现一个接口,它必须要实现接口声明的所有方法。
    但是,类可以不实现抽象类声明的所有方法,
    当然,在这种情况下,类也必须得声明成是抽象的。

  • 抽象类可以在不提供接口方法实现的情况下实现接口。

  • Java接口中声明的变量默认都是final的。
    抽象类可以包含非final的变量。

  • Java接口中的成员函数默认是public的。
    抽象类的成员函数可以是private,protected或者是public。

  • 接口是绝对抽象的,不可以被实例化。
    抽象类也不可以被实例化,
    但是,如果它包含main方法的话是可以被调用的。



三、面向对象设计的对象关系:依赖、关联、组合、聚合


  • 依赖(Dependency)关系是类与类之间的联接,
    表示一个类依赖于另一个类的定义,依赖总是单向的,
    在Java语言中,体现为局部变量、方法的形参,及对静态方法的调用。


  • 关联(Association)关系是一种拥有关系(引用关系),
    一个类知道另一个类的属性和方法,关联可以是双向的,也可以是单向的。
    在Java语言中,关联关系一般使用成员变量来实现。
    UML用实线箭头来表示


  • 组合(Composition) 表示一种强的拥有关系,
    是部分与整体之间的关系,部分和整体的生命周期一样,
    如:胳膊和人就是部分和整体的关系,胳膊和人的生命周期是相同的。
    UML用实心的菱形+实线来表示


  • 聚合(Aggregation)表示一种弱的拥有关系,
    是整体与个体之间的关系。
    如:汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。
    UML用空心的菱形+实线来表示


仅仅从语法上是区分不开的,需要察所涉及的类之间的逻辑关系。




注意:本文归作者所有,未经作者允许,不得转载