面向对象编程(OOP)
大致思路
-
先设计对象模板,也就是对象的设计图:类(Class)
-
通过
new
关键字,每new
一次类就生成一个新的对象(实例化)
对象(Object)
本质上是一种特殊的数据结构(类似一张表),包含属性(成员变量)和行为(方法)。
-
属性:描述对象的状态(数据)
-
方法:描述对象能做什么(行为)
类的基本语法
构造器(Constructor)
类似于类中无返回值的方法,用于初始化对象。
特点:
-
创建对象时,自动调用构造器。
-
方法名与类名完全一致,且无返回值类型(连
void
也不写)。
应用场景:
-
在创建对象时初始化成员变量(属性)。
注意:
-
类默认自带一个无参构造器(如果未手动定义构造器)。
-
若定义了有参构造器,默认的无参构造器会失效,需手动定义无参构造器。
示例:
public class Person {
String name;
int age;
// 无参构造器
public Person() {
this.name = "Unknown";
this.age = 0;
}
// 有参构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
this 关键字
表示当前对象的引用,是一个指向自身的变量。
应用场景:
-
解决局部变量与成员变量的命名冲突。
-
在构造器中调用其他构造器(需放在第一行,如
this()
)。
示例:
public class Person {
String name;
public void setName(String name) {
this.name = name; // this 区分成员变量和参数
}
}
封装(Encapsulation)
面向对象三大特征之一(封装、继承、多态)。
定义:
-
将对象的属性隐藏(私有化),通过公有的方法(如 getter/setter)访问和修改。
优点:
-
提高安全性,防止外部直接修改数据。
-
隐藏实现细节,提供简洁接口。
实现方式:
-
成员变量用
private
修饰。 -
提供
public
的 getter/setter 方法。
示例:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
}
javabean(实体类)
一种特殊的类,通常用于存储数据。
要求:
-
成员变量全部私有化(
private
),并提供public
的 getter/setter 方法。 -
提供一个无参构造器(默认或手动定义)。
应用场景:
-
负责数据的存取,业务逻辑交给其他类处理,实现数据与业务分离。
示例:
public class Student {
private String name;
private int id;
// 无参构造器
public Student() {}
// getter 和 setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
static 关键字
表示静态,属于类而不属于某个对象。
特点:
-
被
static
修饰的成员(变量、方法)在类加载时初始化,所有对象共享。 -
可以通过类名直接访问(如
ClassName.staticMethod()
),无需创建对象。
应用场景:
-
静态变量:存储全局共享数据。
-
静态方法:提供工具功能,不依赖对象状态。
注意:
-
静态方法中不能直接访问非静态成员(需创建对象)。
-
this
不能在静态方法中使用。
示例:
public class Calculator {
public static int count = 0; // 静态变量,记录计算次数
public static int add(int a, int b) { // 静态方法
count++;
return a + b;
}
}
class Test {
public static void main(String[] args) {
System.out.println(Calculator.add(2, 3)); // 输出 5
System.out.println(Calculator.count); // 输出 1
}
}
面向对象三大特征(补充)
继承(Inheritance)
子类通过
extends
关键字继承父类的属性和方法。
特点:
-
提高代码复用性。
-
子类可以重写(override)父类方法。
注意:
-
Java 中是单继承(一个类只能继承一个父类)。
-
私有成员不能被直接继承。
示例:
public class Animal {
public void eat() {
System.out.println("Eating...");
}
}
public class Dog extends Animal {
public void bark() {
System.out.println("Woof!");
}
}
多态(Polymorphism)
同一个方法在不同对象中表现出不同的行为。
实现方式:
-
方法重写(子类重写父类方法)。
-
方法重载(同一类中方法名相同,参数不同)。
优点:
-
提高代码灵活性和扩展性。
示例:
public class Animal {
public void sound() {
System.out.println("Some sound");
}
}
public class Cat extends Animal {
@Override
public void sound() {
System.out.println("Meow");
}
}
class Test {
public static void main(String[] args) {
Animal myAnimal = new Cat(); // 多态
myAnimal.sound(); // 输出 "Meow"
}
}