面向对象的范例支持四个主要原则:抽象,封装,继承和多态。它们也被称为面向对象范式的四大支柱。
抽象是暴露实体的基本细节的过程,同时忽略不相关的细节,以减少用户的复杂性。封装是将数据和数据操作绑定在一起的过程。继承用于从现有类型派生新类型,从而建立父子关系。多态性让实体在不同的环境中具有不同的含义。
1. 抽象
抽象是很容易理解的,当你把它与这个世界联系起来。例如,当您开车时
您不必关心汽车的内部工作情况。 你所关心的是通过方向盘,刹车踏板,油门踏板等接口与你的汽车进行交互。在这里,你对汽车的知识是抽象的。
在计算机科学中,抽象是定义数据和程序的过程,顾名思义,就是隐藏实现细节。更简单地说,抽象是隐藏不相关的信息,或者只显示相关信息,并通过将其与现实世界中类似的东西进行比较来简化它。
(1) 数据抽象
数据抽象是从多种更小的数据类型创建复杂数据类型的方式 -这更接近现实生活中的实体。例如 一个Employee类可以是一个拥有各种小型且关联的复杂对象组成的。
public class Employee
{
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语言中,多态性基本上被认为是两个版本:
编译时间多态(静态绑定或方法重载)
运行时多态(动态绑定或方法覆盖)