Files
home/docs/java/oop.md
2026-02-21 15:39:27 +08:00

158 lines
2.8 KiB
Markdown

# 面向对象编程
## 类与对象
### 类的定义
```java
public class Person {
// 属性(字段)
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 方法
public void sayHello() {
System.out.println("你好,我是" + name);
}
// Getter和Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
### 创建对象
```java
Person person = new Person("张三", 25);
person.sayHello(); // 你好,我是张三
person.setName("李四");
System.out.println(person.getName()); // 李四
```
## 封装
封装是面向对象的三大特性之一,通过访问修饰符控制类的成员访问权限。
| 修饰符 | 同一类 | 同一包 | 子类 | 其他 |
|--------|--------|--------|------|------|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| default | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |
## 继承
```java
// 父类
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + "正在吃东西");
}
}
// 子类
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void bark() {
System.out.println(name + "正在汪汪叫");
}
}
// 使用
Dog dog = new Dog("旺财");
dog.eat(); // 旺财正在吃东西
dog.bark(); // 旺财正在汪汪叫
```
## 多态
```java
public class Shape {
public void draw() {
System.out.println("绘制图形");
}
}
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
// 多态使用
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.draw(); // 绘制圆形
shape2.draw(); // 绘制矩形
```
## 抽象类与接口
### 抽象类
```java
public abstract class Vehicle {
protected String brand;
public Vehicle(String brand) {
this.brand = brand;
}
// 抽象方法
public abstract void start();
// 具体方法
public void showBrand() {
System.out.println("品牌:" + brand);
}
}
```
### 接口
```java
public interface Flyable {
void fly();
default void show() {
System.out.println("可以飞行");
}
}
public class Bird implements Flyable {
@Override
public void fly() {
System.out.println("鸟在飞翔");
}
}
```