跳到主要内容
版本:1.0

封装、继承与多态

封装、继承、多态是面向对象的三大特性,是 Java 设计的基石。

封装​

把属性设为 private,通过 public 的 getter/setter 方法受控访问,保护数据不被随意修改:

public class Account {
private double balance; // 私有属性,外部无法直接访问

public double getBalance() {
return balance;
}

public void deposit(double amount) {
if (amount > 0) { // 在方法中做校验
balance += amount;
}
}
}

访问修饰符权限从宽到严:

修饰符同类同包子类任意
public是是是是
protected是是是否
默认(不写)是是否否
private是否否否

继承​

子类用 extends 继承父类,复用其非私有成员。Java 只支持单继承:

public class Animal {
String name;

public void eat() {
System.out.println(name + " 在吃东西");
}
}

public class Dog extends Animal {
public void bark() {
System.out.println(name + " 在汪汪叫");
}
}
Dog dog = new Dog();
dog.name = "旺财";
dog.eat(); // 继承自 Animal
dog.bark(); // Dog 自己的方法

子类构造方法中可以用 super(...) 调用父类构造,super.方法() 调用父类被重写的方法。

方法重写(Override)​

子类重新实现父类中签名相同的方法:

public class Dog extends Animal {
@Override
public void eat() {
System.out.println(name + " 在啃骨头");
}
}

@Override 注解让编译器帮忙检查,建议养成书写的习惯。

多态​

父类引用指向子类对象,调用方法时执行的是子类的实现(动态绑定):

Animal a = new Dog(); // 编译时类型 Animal,运行时类型 Dog
a.eat(); // 输出:旺财 在啃骨头(执行 Dog 的重写)

多态的价值:用统一的父类类型操作不同的子类,轻松扩展新类型而不用改动原有代码。