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