1、对象(object)
万物皆为对象(根类Object类)。
程序是对象的集合(面向对象程序设计语言OOP)。
每个对象都有自己的由其他对象所构成的存储(对象有成员属性)。
每个对象都拥有其类型(每个对象都是某个类class的一个实例instance)。
某一特定类型的所有对象都可以接收同样的信息(继承)。
2、类型(type)
类描述具有相同特性(数据元素)和行为(功能)的对象集合。是面向对象设计除了基本数据类型外的,一种通用的数据类型。
3、对象作为“服务提供者”
提高对象的内聚性,将对象的设计简化,并凸显其提高的服务价值。
高质量代码的基本要求是:可复用、高内聚、低耦合。
4、封装(信息隐藏)
指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。
一句话总结:
所谓封装,就是把数据和方法保护在类的内部,只允许可信的类或对象操作,对不可信的进行信息隐藏。
好处:
(1)实现了专业的分工。
将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工。
(2)隐藏信息,实现细节。
通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。
5、继承(代码复用)
is-a : 纯粹替代,extends。
is-like-a : 扩展替代,extends 与 implements。
子类与父类的关系并不是日常生活中的父子关系,子类与父类而是一种特殊化与一般化的关系,是is-a的关系,子类是父类更加详细的分类。
继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。
另外子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写(overriding)。
一句话总结,
所谓继承,就是可以使用现有类的所有数据和方法(包括私有的),并且不需要重复编写现有类,实现功能扩展,达到代码复用。
注意:设计继承的时候,若要让某个类能继承,父类需适当开放访问权限,遵循里氏代换原则,即向修改关闭对扩展开放,也就是开-闭原则。
6、多态(polymorphism)
相同接口的对象,调用其相同的方法,参数也相同时,但表现的行为却不同。
多态分为编译时多态(又称静态多态),以及 运行时多态(又称动态多态)。
编译时多态,是指程序在编译过程就可以确认调用哪个方法。
运行时多态,是指程序中的引用对象指向的哪个具体类型,以及该对象通过哪个具体方法调用,在编程中并不能确定,只有在运行时确定。这样,我们可以让引用对象绑定到不同的实现类上,从而实现该对象将有不同的具体方法调用,程序在运行时就有多个运行状态。
实现编译时多态:static、重载
实现运行时多态:继承、重写、向上转型
---------------------------------------历史分割线>>>-----------------------------------------------------
子类以父类的身份出现,但做事情时还是以自己的方法(请注意是非private方法)实现。
子类以父类的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的,是安全的,但向下转型(downcast)是不安全的,需要强制转换。
子类以父类的身份出现时自己特有的属性和方法将不能使用。
注意:以下情况可能多态无效:
1、private方法重载
2、属性同名且可以显式访问
3、static方法同名
---------------------------------------<<<历史分割线-----------------------------------------------------
7、单根继承结构
所有类都是继承同一个根类(Object类),提供了极大的向后兼容性。