1、什么是面向对象编程
- 面向对象程序设计OOP是一种计算机编程架构。OOP的一条基本原理是计算机程序由单个能够起到子程序作用的单元或者对象组合而成。
- 面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类世界、解决现实问题的方法和过程,也即使得描述问题的问题空间内与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
- 面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对对象的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。
2、面向对象编程的特点
1)封装
- 封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言(即描述每一个对象的属性以及其行为的程序代码)组装到一起,一起封装在一个有机的实体中,把他们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块提供良好的基础。
- 在面向对象技术的相关原理以及程序语言中,封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚,低耦合”的最佳状态便是 面向对象技术的封装性所需要的最基本的目标。
- 对于用户来说,对象是如何对各种行为进行操作、运行、实现等细节是不需要刨根问底清楚了解的,用户只需要通过封装外的通道对计算机进行相关方便的操作即可。大大简化了操作的步骤,使用户使用起计算机来更加高效、更加得心应手。
2)继承
- 继承性是面向对象技术中的另外一个中药特点,其主要指的是两种或者两种以上的类之间的联系与区别。
- 继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。
- 如果按照继承源进行划分,则可以分为单继承与多继承。
- 单继承:一个对象仅仅从另外一个对象中继承其相应的特点。
- 多继承:一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象。
- 如果从继承中包含的内容进行划分,则继承可以分为四类,分别为取代继承、包含继承、受限继承和特化继承。
- 取代继承:一个对象在继承另外一个对象的能力与特点之后将副对象进行取代。
- 包含继承:一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于父对象,实现了对于父对象的包含
3)多态
- 从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时收到同一个完全相同的消息之后所表现出来的动作是各不相同的,具有多态性。
- 从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,几十这若干个具有相同函数名的函数所表示的函数是不同的。
3、举个栗子
通过Java代码,看一下封装:
public class Test{
// 向前一步走拆分:
// 1、抬起左脚
// 2、向前迈出一步
// 3、落脚
// 4、右脚向前一步
// 把向前走一步的动作封装成一个方法,调用者不用考虑方法内部实现细节
public static void zou() {
System.out.println("抬起左脚");
System.out.println("向前迈出一步");
System.out.println("落脚");
System.out.println("右脚向前一步");
}
public static void main(String[] args)
{
// 模拟面向过程
System.out.println("抬起左脚");
System.out.println("向前迈出一步");
System.out.println("落脚");
System.out.println("右脚向前一步");
// 直接通过名字调用
zou();
}
}
继承
class father {
public void say() {
System.out.println("我是父类的say方法");
}
}
public class son extends father{
public static void main(String[] args) {
son s = new son();
s.say();
}
}
//输出:我是父类的say方法
多态
public class 多态 {
private static void say() {
System.out.println("我说了null");
}
private static void say(String str) {
System.out.println("我说了" + str);
}
public static void main(String[] args) {
say();
say("你好呀"); // 会根据相应的方法参数去寻找相应的参数
}
}
// 我说了null
// 我说了你好呀