### JAVA学习笔记
#### 面向对象编程基础
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于对象的概念来组织软件架构,并使用类和对象来实现数据封装、继承和多态等特性。相较于传统的面向过程编程(Procedure-Oriented Programming),面向对象编程更加贴近于人类的思维方式,提高了代码的复用性和可维护性。
##### 对象与类
- **对象**:现实世界中的事物都可以被视为对象,例如一个人、一本书等。对象具有状态(属性)和行为(方法)。状态是对象的特征,行为则是对象能够执行的动作。
- **类**:类是对一组具有相同属性和行为的对象的抽象。它是创建对象的蓝图或模板。例如,“人”可以是一个类,具体的人(张三、李四)是这个类的实例。
##### 面向对象的特性
- **封装**:封装是指隐藏对象的具体实现细节,仅对外暴露必要的接口。这有助于保护内部状态,减少外部依赖,提高安全性。
- **继承**:继承允许创建一个新的类,该类继承了现有类的属性和方法。这有助于代码重用和减少重复代码。
- **多态**:多态是指允许子类重写父类的方法,或者允许同一接口的不同实现方式。这使得程序更加灵活,易于扩展。
#### 面向过程与面向对象的区别
- **面向过程**:关注的是如何通过一系列步骤来解决问题,通常使用函数来组织代码。
- **面向对象**:关注的是问题领域内的对象以及这些对象之间的交互,强调通过对象间的通信来完成任务。
#### Java中的面向对象编程
Java是一种典型的面向对象编程语言,它支持面向对象的所有核心特性,包括封装、继承和多态。
##### 定义类
在Java中,定义类的基本语法如下:
```java
public class ClassName {
// 成员变量
private int id;
// 构造方法
public ClassName(int id) {
this.id = id;
}
// 方法
public void displayId() {
System.out.println("ID: " + id);
}
}
```
- **成员变量**:类中的变量被称为成员变量,它们用于保存对象的状态。成员变量可以是公有的(`public`),私有的(`private`)或其他访问级别。
- **构造方法**:构造方法是一种特殊的方法,用于初始化新创建的对象。构造方法的名称必须与类名相同,并且不返回任何值。
##### 实例变量与局部变量
- **实例变量**:实例变量定义在类中但位于任何方法之外。它们的生命周期与对象相同,并且每个对象都有自己的实例变量副本。
- **局部变量**:局部变量定义在方法中。它们只在其所在的代码块或方法内有效,且在方法调用结束时销毁。
##### 方法
方法是一组指令的集合,用于执行特定任务。Java中的方法定义包括以下组成部分:
- **修饰符**:如`public`、`private`等,用于指定方法的访问级别。
- **返回类型**:方法返回的数据类型,如果方法不返回任何值,则使用`void`。
- **方法名**:方法的名称。
- **参数列表**:传递给方法的信息。
- **方法体**:包含实际执行代码的花括号 `{}` 内部的部分。
示例:
```java
public int addNumbers(int a, int b) {
return a + b;
}
```
在这个例子中,`addNumbers`方法接受两个整数参数并返回它们的和。
##### 构造方法
构造方法是类的一个特殊方法,用于初始化新创建的对象。构造方法的名称与类名相同,没有返回类型。构造方法可以在类中定义多个,只要它们的参数列表不同即可。
示例:
```java
public class Student {
private String name;
public Student() {
// 默认构造方法
}
public Student(String name) {
this.name = name;
}
}
```
这里定义了一个默认的无参构造方法和一个带有一个字符串参数的构造方法。
##### 方法重载与覆盖
- **重载(Overloading)**:在一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。这意味着可以使用相同的名称为不同的参数集定义多个方法。
- **覆盖(Overriding)**:当子类重写父类的方法时,就发生了方法覆盖。这意味着子类提供了与父类相同的方法签名(名称和参数列表),但实现了不同的逻辑。
示例:
```java
public class Shape {
public void draw() {
System.out.println("Drawing a shape.");
}
}
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a circle.");
}
}
```
在这个例子中,`Circle`类重写了`Shape`类的`draw`方法。
#### 小结
面向对象编程的核心在于理解对象的概念及其与类的关系。在Java中,通过定义类和创建对象,可以构建出复杂的程序结构。理解面向对象编程的基本概念和技术,如封装、继承和多态,对于开发高效、可维护的软件至关重要。