面向对象的范例支持四个主要原则:抽象,封装,继承和多态。它们也被称为面向对象范式的四大支柱。java
抽象是暴露实体的基本细节的过程,同时忽略不相关的细节,以减小用户的复杂性。封装是将数据和数据操做绑定在一块儿的过程。继承用于从现有类型派生新类型,从而创建父子关系。多态性让实体在不一样的环境中具备不一样的含义。ide
1. 抽象函数
抽象是很容易理解的,当你把它与这个世界联系起来。例如,当您开车时spa
您没必要关心汽车的内部工做状况。 你所关心的是经过方向盘,刹车踏板,油门踏板等接口与你的汽车进行交互。在这里,你对汽车的知识是抽象的。orm
在计算机科学中,抽象是定义数据和程序的过程,顾名思义,就是隐藏实现细节。更简单地说,抽象是隐藏不相关的信息,或者只显示相关信息,并经过将其与现实世界中相似的东西进行比较来简化它。对象
(1) 数据抽象继承
数据抽象是从多种更小的数据类型建立复杂数据类型的方式 -这更接近现实生活中的实体。例如 一个Employee类能够是一个拥有各类小型且关联的复杂对象组成的。接口
public class Employeeci
{get
private Department department;
private Address address;
private Education education;
//So on...
}
因此,若是你想获取员工的信息,你能够从员工对象中提问 - 就像你在现实生活中同样,询问这我的本身。
(2) 行为抽象—方法
行为抽象是经过在一个简单的方法调用中隐藏一个复杂任务的动做序列来实现的,因此执行任务的逻辑能够从客户端隐藏起来,而且能够在未来改变而不影响客户端代码。
public class EmployeeManager
{
public Address getPrefferedAddress(Employee e)
{
//Getall addresses from database
//Applylogic to determine which address is preferred
//Returnaddress
}
}
2. 封装
将类中的数据和方法经过访问控制实现隐藏,封装本质上同时具备信息隐藏和实现隐藏。
信息隐藏是经过使用访问控制关键字(public,private,protected)来完成的,实现隐藏是经过为类建立接口来实现的。
Information hiding
class InformationHiding { //Restrict direct access to inward data private ArrayList items = new ArrayList();
//Provide a way to access data - internal logic can safely be changed in future public ArrayList getItems(){ return items; } } |
Implementation hiding
interface ImplemenatationHiding { Integer sumAllItems(ArrayList items); } class InformationHiding implements ImplemenatationHiding { //Restrict direct access to inward data private ArrayList items = new ArrayList();
//Provide a way to access data - internal logic can safely be changed in future public ArrayList getItems(){ return items; }
public Integer sumAllItems(ArrayList items) { //Here you may do N number of things in any sequence //Which you do not want your clients to know //You can change the sequence or even whole logic //without affecting the client } } |
3.继承
java中的继承是一个对象获取父对象的属性和行为的机制。它本质上是在类之间建立父子关系。在java中,您将主要使用继承来实现代码重用性和可维护性。
子类从其超类继承全部非私有成员(字段,方法和嵌套类)。构造函数不是成员,所以它们不会被子类继承,但能够从子类调用超类的构造函数。
4.多态
在java语言中,多态性基本上被认为是两个版本:
编译时间多态(静态绑定或方法重载)
运行时多态(动态绑定或方法覆盖)