记录学习Java基础中有关面向对象编程的基础知识,包括面向对象思想,构造方法,封装思想,JavaBean。
1 面向对象概述
1.1 什么是面向对象编程
严谨来说:
面向对象编程(Object-Oriented Programming,简称 OOP)是一种程序设计范式或编程方法论,它基于“对象”这一核心概念来组织和管理计算机程序的结构。在OOP中,数据和处理这些数据的方法被捆绑在一起,形成了一个称为“对象”的自包含单元。对象是对现实世界实体的一种抽象模拟,它们拥有状态(属性或变量)和行为(方法或函数),通过封装、继承和多态等机制来实现复用、模块化以及灵活的设计。
简单来说:
对象就是名词,如动物植物,猫狗…面向对象编程,就是拿这些对象进行代码设计。
1.2 什么是类
类是对象共同特征的描述。对象是类的具体实例。
例如“动物类”下的猫对象,狗对象;也可以是“猫类”下的狸猫对象,橘猫对象;
1.3 如何设计类
Java中,必须先设计类,才能创建其实例对象。
1.4 类声明注意事项
2 构造方法(构造器)
2.1 什么是构造方法(构造器)
构造方法(Constructor)是面向对象编程语言中的一个特殊成员函数,它与类同名,用于初始化新创建的对象实例的状态。当使用new关键字创建类的一个实例时,构造方法会被自动调用。
简单来说,构造方法即创建对象的方法。
2.2 构造方法有什么特点
- 构造方法的名称必须与类名完全相同。
- 构造方法没有返回类型,包括void类型也不可以声明。
- 当创建一个类的新实例时,构造方法会被隐式调用,程序员不能直接调用构造方法。
- 如果不显式定义构造方法,编译器会为该类提供一个默认构造方法,这个默认构造方法不带任何参数且不执行任何操作(如果类中没有其他构造方法的话)。
- 构造方法可以重载,即在同一个类中可以有多个构造方法,它们之间通过参数列表的不同来区分。
2.3 构造方法的注意事项
2.4 this关键字
this,指当前对象的地址。
在上图代码中,当调用Car()或goWith()方法并传入一个字符串参数时,this.name用于区分成员变量 name和方法参数 name,避免了 同名冲突。
3 封装
面向对象的三大特征:封装,继承,多态。
封装:告诉我们,如何正确设计对象的属性和方法。
3.1 什么是封装?
官方回答,理解即可:封装是面向对象编程(OOP)的三大基本特性之一,另外两个是继承和多态。封装的思想主要体现在以下几个方面:
-
数据隐藏:封装的核心概念是将对象的状态(属性或数据成员)与操作这些状态的方法(成员函数或方法)结合在一起,并且对外部世界隐藏其内部实现细节。通过设置访问修饰符如private、protected或public,可以控制哪些成员变量能被外部直接访问,哪些不能。
-
信息抽象:封装有助于创建一个独立、可复用并且易于理解的组件,该组件提供了一组有限的接口(即公开的方法),用户只需要知道如何使用这些接口,而无需了解它们的具体实现机制。
-
提高安全性:通过限制对内部数据的访问,可以防止意外修改或错误地操作数据,从而提高了程序的安全性和稳定性。
-
简化设计和维护:由于内部实现的变化不影响到外部调用者,因此在后续的设计和维护阶段,开发者可以在不改变接口的前提下自由修改类的内部实现逻辑。
简单来说,封装就是将相关的数据和行为组合在一起,形成一个统一的、受保护的整体,外部代码只能通过预定义的接口来访问和操作这个整体,而不能直接干预其内部结构和实现细节。
3.2 如何进行更好的封装?
4 JavaBean(重要)
JavaBean也称为实体类,其对象可以用于在程序中封装数据。
标准的JavaBean必须满足以下要求:
1. 成员变量使用 private 修饰。
2. 提供成员变量对应的 setXxx() / getXxx()方法。
3. 必须提供一个无参构造器;有参数构造器是可写可不写的。
4.1 一个JavaBean类示例
一个符合JavaBean规范的Student实体类标准示例:
public class Student{
// 私有成员变量,遵循驼峰命名法(首字母小写,后续单词首字母大写)
private String studentName;
// 默认构造器(无参数)
public Student() {
// 可以为空,可以初始化默认值或进行其他操作
}
// 带参数的构造器,用于实例化时直接设置属性值
public Student(String name, int age) {
this.studentName = name;
}
// Getter方法
public String getStudentName() {
return studentName;
}
// Setter方法
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
在上述Student
类中:
- 类是公共的(public),具有可访问性。
- 包含私有成员变量(private)。
- 提供了与每个私有成员变量对应的公共getter和setter方法。
- 有一个默认的无参数构造器。
5 成员变量和局部变量的区别
6 面向对象实践案例