一、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用空心的菱形+实线来表示
仅仅从语法上是区分不开的,需要察所涉及的类之间的逻辑关系。
注意:本文归作者所有,未经作者允许,不得转载