面向对象设计的基本特征有哪些(面向对象的3大基本特征)
面向对象设计的基本特征有哪些(面向对象的3大基本特征)继承是指这样一种能力:它可以使用现有类的所有功能,并在无须重新编写原来的类的情况下对这些功能进行扩展。/** * 矩形 */ class Rectangle { /** * 设置矩形的长度和宽度 */ public Rectangle(int length int width) { this.length = length; this.width = width; } /** * 长度 */ private int length; /** * 宽度 */ private int width; /** * 获得矩形面积 * * @return */ public int area() { return this.length * this.width; } }我们通过封装的方式,给“矩形”定义了“长度”和“宽度”,这就完成了对现实世界中“矩形”的抽象的第一步。封装举例比如我们想定义一个矩形
面向对象的开发范式其实是对现实世界的理解和抽象的方法,那么,具体如何将现实世界抽象成代码呢?这就需要运用面向对象的三大基本特征,分别是封装、继承和多态。
1. 封装(Encapsulation)
所谓封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的类或者对象隐藏信息。
简单地说,一个类就是一个封装了数据及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外地改变或错误地使用了对象的私有部分。
封装举例
比如我们想定义一个矩形,先定义一个Rectangle类,然后通过封装的手段放入一些必备
数据:
/**
* 矩形
*/
class Rectangle {
/**
* 设置矩形的长度和宽度
*/
public Rectangle(int length int width) {
this.length = length;
this.width = width;
}
/**
* 长度
*/
private int length;
/**
* 宽度
*/
private int width;
/**
* 获得矩形面积
*
* @return
*/
public int area() {
return this.length * this.width;
}
}
我们通过封装的方式,给“矩形”定义了“长度”和“宽度”,这就完成了对现实世界中“矩形”的抽象的第一步。
2. 继承(Inheritance)继承是指这样一种能力:它可以使用现有类的所有功能,并在无须重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”“父类”“超类”。继承的过程就是从一般到特殊的过程。
继承举例
比如我们想定义一个正方形,因为已经有了矩形,所以可以直接继承Rectangle类(正方形是长方形的一种特例):
/**
* 正方形,继承自矩形
*/
class Square extends Rectangle {
/**
* 设置正方形边长
*
* @param length
*/
public Square(int length) {
super(length length);
}
}
在现实世界中,“正方形”是“矩形”的特例,或者说正方形是通过矩形派生出来的,这种派生关系在面向对象中可以用继承来表达。
3. 多态(Polymorphism)所谓多态,就是指一个类实例的相同方法在不同情形下有不同的表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
最常见的多态就是将子类传入父类参数中,当运行时调用父类方法时,通过传入的子类决定具体的内部结构或行为。
关于多态的例子,将在第2章中深入介绍。
在介绍了面向对象的封装、继承、多态三个基本特征之后,我们基本了解了对现实世界抽象的方法。
内容摘自《深入理解Java核心技术(双色)》,作者张洪亮(@Hollis),他是阿里巴巴技术专家,51CTO 专栏作家,CSDN 博客专家,掘金优秀作者,《程序员的三门课》联合作者,《Java工程师成神之路》系列文章作者;热衷于分享计算机编程相关技术,博文全网阅读量数千万。