在 Java 中,面向对象编程的三大特性——封装性、继承性和多态性是构建复杂软件系统的基础,下面分别对其进行详细解释并给出示例。

封装性

  • 定义:封装是把对象的属性和操作(方法)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,只对外提供必要的访问接口。通过封装,可以提高代码的安全性和可维护性,防止外部代码随意访问和修改对象的内部状态。
  • 示例
class BankAccount {
    // 私有属性,外部无法直接访问
    private String accountNumber;
    private double balance;

    // 构造方法,用于初始化对象
    public BankAccount(String accountNumber, double balance) {
        this.accountNumber = accountNumber;
        this.balance = balance;
    }

    // 获取账户余额的公共方法
    public double getBalance() {
        return balance;
    }

    // 存款的公共方法
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("存款成功,当前余额为:" + balance);
        } else {
            System.out.println("无效的存款金额");
        }
    }

    // 取款的公共方法
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("取款成功,当前余额为:" + balance);
        } else {
            System.out.println("余额不足或取款金额无效");
        }
    }
}

public class EncapsulationExample {
    public static void main(String[] args) {
        BankAccount account = new BankAccount("123456", 1000);
        account.deposit(500);
        account.withdraw(200);
    }
}

在上述代码中,BankAccount 类的 accountNumberbalance 属性被声明为 private,外部代码无法直接访问。通过提供公共的 getBalancedepositwithdraw 方法,实现了对这些属性的安全访问和操作。

继承性

  • 定义:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,从而实现代码的复用。子类可以在继承父类的基础上,添加自己特有的属性和方法,或者对父类的方法进行重写。
  • 示例
// 父类:动物
class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

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

// 子类:狗,继承自 Animal 类
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void bark() {
        System.out.println(name + " 正在汪汪叫");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Dog dog = new Dog("旺财");
        dog.eat();
        dog.bark();
    }
}

在这个例子中,Dog 类继承了 Animal 类的 name 属性和 eat 方法,同时还添加了自己特有的 bark 方法。通过 super 关键字调用父类的构造方法进行属性初始化。

多态性

  • 定义:多态是指同一个方法调用可以根据对象的实际类型产生不同的行为。在 Java 中,多态主要通过继承和方法重写来实现。通过父类引用指向子类对象,可以在运行时动态地调用子类重写的方法。
  • 示例
// 父类:图形
abstract class Shape {
    public abstract double area();
}

// 子类:圆形
class Circle extends Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double area() {
        return Math.PI * radius * radius;
    }
}

// 子类:矩形
class Rectangle extends Shape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double area() {
        return length * width;
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Shape circle = new Circle(5);
        Shape rectangle = new Rectangle(4, 6);

        System.out.println("圆形的面积是:" + circle.area());
        System.out.println("矩形的面积是:" + rectangle.area());
    }
}

在上述代码中,Shape 是一个抽象类,包含一个抽象方法 areaCircleRectangle 类继承自 Shape 类,并对 area 方法进行了重写。在 main 方法中,通过父类引用 Shape 指向子类对象 CircleRectangle,调用 area 方法时会根据对象的实际类型调用相应子类的 area 方法,从而实现了多态。