# 面向对象编程 ## 类与对象 ### 类的定义 ```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("鸟在飞翔"); } } ```