java面向对象编程【基础篇】之基础概念
目录
- 🚀前言
- 🤔面向过程VS面向对象
- 💯面向过程编程(POP)
- 💯面向对象编程(OOP)
- 💯两者对比
- 🌟三大特性
- 💯封装性
- 💯继承性
- 💯多态性
- 🦜类与对象
- 💯类与对象的关系
- 💯类的定义
- 💯对象的创建和使用
🚀前言
大家好!我是 EnigmaCoder。
- 本文介绍java面向对象编程的基本概念,主要包含面向对象与面向过程的区别、面向对象编程的三大特性、类与对象等。
🤔面向过程VS面向对象
💯面向过程编程(POP)
- 定义:以“
过程
”(即算法或操作步骤)为核心组织代码,将复杂的问题拆分成一系列线性的、顺序执行的步骤(函数),通过函数调用和数据传递完成任务。 - 其核心逻辑在于:
程序=数据结构+算法
。 - 简单的说,其关注的是“
做什么
”,通过“第一步做什么、第二步做什么
”来一步一步解决问题。数据作为函数的输入与输出处于被动的被处理地位。
💯面向对象编程(OOP)
- 定义:以“
对象
”为核心组织代码,将数据(属性)和操作数据的方法(行为)封装成一个独立的单元(类),通过对象之间的交互(调用方法)解决问题。 - 其核心逻辑在于:
程序=多个对象+对象间的消息传递
。 - 关注“
谁来做
”,将问题抽象为多个具有明确职责的对象,每个对象自主管理自身数据,并通过公开接口与其他对象协作。
💯两者对比
维度 | 面向过程(POP) | 面向对象(OOP) |
---|---|---|
核心 | 以「步骤/流程」为中心(关注“如何做”)。 | 以「实体(对象)」为中心(关注“谁来做”)。 |
代码单元 | 函数(数据与逻辑分离)。 | 类/对象(数据与逻辑封装在一起)。 |
组织方式 | 线性流程,函数按顺序调用。 | 模块化协作,对象通过接口交互。 |
复用性 | 低(仅函数复用,需手动传递数据)。 | 高(通过继承/组合复用类的属性和行为)。 |
维护成本 | 高(修改易影响多处逻辑)。 | 低(封装细节,外部调用不感知内部变化)。 |
适用场景 | 简单任务、算法实现(如排序、脚本)。 | 复杂系统、多实体协作(如电商、游戏引擎)。 |
一句话区分
- POP:按步骤做事,适合“小而简”;
- OOP:让对象分工协作,适合“大而变”。
🌟三大特性
💯封装性
- 两个含义:一是指将对象的属性和行为看成一个整体,并封装到一个密不可分的独立单元中;二是指信息隐藏,进行合理隐藏,合理暴露。
- 封装机制为封装在一个整体的变量及方法规定了不同级别的“
可见性
”或访问权限,以保证外界不能随意更改其内部的属性值,也不能任意调用其内部的功能方法。
💯继承性
- 继承指的是首先拥有反映事物
一般特性
的类,然后在此基础上派生出反映特殊
事物的类。 - 例如,已有了汽车的类,该类中包含了汽车普遍拥有的属性和行为,进一步产生了赛车的类,该类不仅继承了汽车类拥有的属性和行为,也拥有自己特有的属性和行为。
- 继承机制大大提高了代码的可复用性,提高了软件的开发效率,降低了程序产生错误的可能性,也为程序的修改补充提供了便利。
- 子类只能继承一个父类的,称为
单继承
;子类允许继承多个父类的,称为多继承
,java不支持多继承。
💯多态性
- 多态允许程序中出现
重名
现象。java语言有方法重载和对象多态两种形式的多态。 - 方法重载:在一个类中,允许出现重名的方法,但方法的参数不同,其实现的功能也不同。
- 对象多态:子类对象可以与父类对象进行相互的转换,而且根据其对象的不同完成的功能也不同。
- 多态的特性使得程序的抽象程度和简捷程度更高,有利于程序员间的协同开发。
🦜类与对象
💯类与对象的关系
在面向对象中类和对象是最基本、最重要的组成单元。
- 类实际上是客观世界中某些群体的一些基本特征抽象,而对象则表示该基本特征下的具体的事物。
- 例如,人这个概念即为一个类,其属性是姓名、性别等等,其行为是吃饭、睡觉等等。在这些基本特征下的具体的人(如张三)即为对象。每个对象通过属性和行为的不同进行区分。
💯类的定义
类由属性和行为组成,属性即为一个个的变量,行为即为方法。
- 类的定义格式:
class 类名称{数据类型 属性;public 返回值的数据类型 方法名称 (参数1,参数2 ...){程序语句;return 表达式;}}
- 根据格式写一个
Student
类:
public class Student {String name;int age;String gender;double height;double weight;double Chinesescore;double mathscore;public void AllScore() {double sum = Chinesescore + mathscore;System.out.println(name+"总成绩为:" + sum);}public void AverageScore() {double average = (Chinesescore + mathscore)/2;System.out.println(name+"平均成绩为:" + average);}
}
💯对象的创建和使用
- 对象的创建:
类名 对象名称 = null; //声明对象
对象名称 = new 类名(); //实例化对象,只要有关键字new就表示开辟新的堆内存空间
当然,也可以一步到位:
类名 对象名称 = new 类名();
- 对象的使用:
访问属性:对象名称.属性名;
访问方法:对象名称.方法名();
以上述的Student类写一个Test类为例:
public class Test {public static void main(String[] args) {// 创建对象的格式:类名 对象名 = new 类名();student s1=new student();s1.name="张三";s1.age=18;s1.gender="男";s1.height=1.88;s1.weight=80.5;s1.Chinesescore=96;s1.mathscore=100;System.out.println(s1.name);System.out.println(s1.age);System.out.println(s1.gender);System.out.println(s1.height);System.out.println(s1.weight);s1.AllScore();s1.AverageScore();}
}
运行结果为:
张三
18
男
1.88
80.5
张三总成绩为:196.0
张三平均成绩为:98.0
在 Java 等编程语言运行时,内存被划分为栈、堆和方法区,三者分工协作:栈内存遵循后进先出原则,存储基本数据类型变量的具体值和引用数据类型变量指向对象的地址,同时在方法调用时创建栈帧记录局部变量、参数和返回地址,方法执行完后栈帧被清理;堆内存如同大型仓库,使用new关键字创建的对象实例存放在此,包含对象的属性、方法等信息;方法区则存放类的结构、静态变量、常量池等信息,类的方法在此存储,当方法被调用时,其代码会加载到栈内存中执行,执行完毕后栈内存中的相关资源被释放,但方法区中的类信息仍保留,直到类被卸载 。