一、封装(Encapsulation)
核心定义
封装是把对象的属性(数据)和行为(方法)绑定在一起,并隐藏对象内部的实现细节,只对外暴露有限的访问接口。核心目的是数据安全和代码解耦。
实现方式
- 使用
private修饰属性,禁止外部直接访问; - 提供
public的getter/setter方法来访问和修改属性,可在方法中增加校验逻辑; - 把相关的属性和方法封装在一个类中。
代码示例
java
运行
public class User { // 私有属性,外部无法直接访问(封装核心) private String name; private int age; // 提供getter方法,对外暴露读取属性的接口 public String getName() { return name; } // 提供setter方法,对外暴露修改属性的接口,并增加校验逻辑 public void setAge(int age) { // 封装的优势:可以控制数据的合法性 if (age < 0 || age > 150) { throw new IllegalArgumentException("年龄必须在0-150之间"); } this.age = age; } public int getAge() { return age; } // 封装行为:把相关操作封装为方法 public void showInfo() { System.out.println("姓名:" + name + ",年龄:" + age); } } // 测试类 public class EncapsulationTest { public static void main(String[] args) { User user = new User(); // user.age = -10; // 直接访问私有属性,编译报错(封装保护) user.setAge(25); // 通过setter方法合法修改 System.out.println(user.getAge()); // 输出 25 // 非法值会被校验拦截 user.setAge(200); // 抛出 IllegalArgumentException } }二、继承(Inheritance)
核心定义
继承允许子类(Subclass)复用父类(Superclass)的属性和方法,同时子类可以扩展自己的特有功能。核心目的是代码复用和建立类之间的层级关系。
关键规则
- Java 中只支持单继承(一个子类只能有一个直接父类),但可以多层继承;
- 子类通过
extends关键字继承父类; - 父类的
private成员子类无法直接访问,但可通过public/protected方法间接访问; - 子类可通过
super关键字调用父类的构造方法、属性和方法。
代码示例
java
运行
// 父类:提取通用属性和方法 public class Animal { protected String name; // protected:子类可访问 public Animal(String name) { this.name = name; } // 通用方法 public void eat() { System.out.println(name + "在吃东西"); } } // 子类:继承父类,复用代码并扩展 public class Dog extends Animal { // 子类特有属性 private String breed; // 子类构造方法,必须先调用父类构造方法 public Dog(String name, String breed) { super(name); // 调用父类构造方法 this.breed = breed; } // 子类特有方法(扩展功能) public void bark() { System.out.println(name + "(" + breed + ")在汪汪叫"); } } // 测试类 public class InheritanceTest { public static void main(String[] args) { Dog dog = new Dog("旺财", "哈士奇"); dog.eat(); // 复用父类方法,输出:旺财在吃东西 dog.bark(); // 子类特有方法,输出:旺财(哈士奇)在汪汪叫 } }三、多态(Polymorphism)
核心定义
多态是指同一个行为(方法)在不同对象上表现出不同的形态。核心目的是解耦和提高代码扩展性,也是面向对象最灵活的特性。
实现条件
- 存在继承 / 实现关系;
- 子类重写(Override)父类的方法;
- 父类引用指向子类对象(向上转型)。
代码示例
java
运行
// 父类 public abstract class Shape { // 抽象方法,由子类实现(不同形态) public abstract void draw(); } // 子类1:圆形 public class Circle extends Shape { @Override public void draw() { System.out.println("绘制圆形"); } } // 子类2:矩形 public class Rectangle extends Shape { @Override public void draw() { System.out.println("绘制矩形"); } } // 测试类:体现多态的核心价值 public class PolymorphismTest { // 统一的方法,接收父类类型,适配所有子类 public static void drawShape(Shape shape) { shape.draw(); // 运行时调用子类的实现(动态绑定) } public static void main(String[] args) { // 父类引用指向子类对象 Shape circle = new Circle(); Shape rectangle = new Rectangle(); // 同一个drawShape方法,表现出不同行为 drawShape(circle); // 输出:绘制圆形 drawShape(rectangle); // 输出:绘制矩形 // 扩展新子类(三角形),无需修改drawShape方法 Shape triangle = new Triangle(); drawShape(triangle); // 输出:绘制三角形 } } // 新增子类:三角形(扩展能力) class Triangle extends Shape { @Override public void draw() { System.out.println("绘制三角形"); } }总结
- 封装:隐藏内部细节,通过接口访问,核心是数据安全(如
private属性 +getter/setter); - 继承:复用父类代码,子类可扩展,核心是代码复用(
extends关键字); - 多态:父类引用指向子类对象,方法调用动态绑定,核心是代码扩展(重写 + 向上转型)。