Java学习笔记(5) Java 面向对象三大特性:封装、继承与多态

47 阅读5分钟

在 Java 编程的世界里,面向对象编程(Object-Oriented Programming,OOP)是一种核心编程范式,它将现实世界中的事物抽象为对象,并通过对象之间的交互来解决问题。而封装、继承与多态作为 Java 面向对象编程的三大特性,不仅是构建高效、可维护代码的基石,更是提升编程思维的关键。

一、封装:数据的安全卫士​

1. 封装的概念与原理​

封装是指将对象的属性和实现细节隐藏起来,仅对外提供公共的访问方法。在 Java 中,通常通过将类的属性声明为private(私有),并提供对应的getter和setter方法来实现对属性的访问和修改。这样做的好处在于可以对属性进行严格的控制,避免外部程序直接访问和修改属性值,从而保证数据的安全性和一

2. 员工管理系统中的封装实现​

以员工管理系统为例,员工类Employee包含姓名、年龄、工资等属性,我们可以对这些属性进行封装:

public class Employee {
    private String name;
    private int age;
    private double salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

在上述代码中,name、age和salary属性被声明为private,外部无法直接访问。而getter方法用于获取属性值,setter方法用于设置属性值,并且在setter方法中可以添加逻辑判断,对传入的值进行校验。例如,在设置年龄时,可以添加年龄范围的校验:​

public void setAge(int age) {
    if (age > 0 && age < 100) {
        this.age = age;
    } else {
        System.out.println("年龄输入不合法");
    }
}

3. 封装的应用价值​

封装提高了代码的安全性和可维护性。通过隐藏内部实现细节,外部程序只能通过规定的方法访问和修改属性,避免了不合理的数据修改。同时,当内部实现发生变化时,只要保持外部接口不变,就不会影响到其他调用该类的代码,降低了代码的耦合度。

二、继承:代码复用的利器​

1. 继承的概念与原理​

继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,子类可以在父类的基础上进行扩展和修改。在 Java 中,使用extends关键字来实现继承。继承的本质是一种 “is-a” 的关系,例如经理类是一种员工类。​

2. 员工管理系统中的继承实现​

在员工管理系统中,经理类Manager继承自员工类Employee,并且经理类可能有额外的属性,如管理的团队人数:

public class Manager extends Employee {
    private int teamSize;

    public int getTeamSize() {
        return teamSize;
    }

    public void setTeamSize(int teamSize) {
        this.teamSize = teamSize;
    }
}

通过继承,Manager类自动拥有了Employee类的name、age和salary属性以及对应的getter和setter方法,同时可以添加自己特有的属性和方法,实现了代码的复用。​

3. 继承的应用价值​

继承极大地提高了代码的复用性,减少了重复代码的编写。子类可以在父类的基础上进行扩展,满足不同的业务需求。同时,继承也有助于建立类之间的层次关系,使代码结构更加清晰,便于维护和扩展。

三、多态:灵活编程的关键​

1. 多态的概念与原理​

多态是指同一个方法调用,由于对象的不同而表现出不同的行为。在 Java 中,多态主要通过方法重写(Override)和对象的向上转型与向下转型来实现。方法重写是指子类重新实现父类中已有的方法,以满足自身的业务需求。​

2. 员工管理系统中的多态实现​

在员工管理系统中,员工类和经理类都有计算奖金的方法,但计算方式不同。我们可以在Employee类中定义一个计算奖金的方法,并在Manager类中重写该方法:

public class Employee {
    // 省略其他代码
    public double calculateBonus() {
        return getSalary() * 0.1; // 普通员工奖金为工资的10%
    }
}

public class Manager extends Employee {
    // 省略其他代码
    @Override
    public double calculateBonus() {
        return getSalary() * 0.2 + getTeamSize() * 100; // 经理奖金为工资的20%加上团队人数*100
    }
}

通过多态,我们可以使用父类的引用来指向子类的对象,并调用重写后的方法:​

public class Main {
    public static void main(String[] args) {
        Employee employee = new Employee();
        employee.setName("普通员工");
        employee.setSalary(8000);
        System.out.println(employee.getName() + "的奖金:" + employee.calculateBonus());

        Manager manager = new Manager();
        manager.setName("经理");
        manager.setSalary(12000);
        manager.setTeamSize(5);
        System.out.println(manager.getName() + "的奖金:" + manager.calculateBonus());

        Employee employeeAsManager = manager; // 向上转型
        System.out.println(employeeAsManager.getName() + "的奖金:" + employeeAsManager.calculateBonus());
    }
}

3. 多态的应用价值​

多态使代码更加灵活和可扩展。当需要增加新的子类时,只要重写父类的方法,就可以在不修改原有代码的情况下实现新的功能。同时,多态也提高了代码的可维护性和可读性,使程序更符合现实世界的逻辑。​

四、总结​

通过 “员工管理系统” 案例,我们深入实践了 Java 面向对象编程的三大特性 —— 封装、继承与多态。封装保证了数据的安全性和一致性,继承实现了代码的复用,多态使程序更加灵活和可扩展。这三大特性相互配合,共同构建了高效、可维护的 Java 程序。在实际开发中,合理运用这些特性,能够提高开发效率,降低维护成本,是 Java 开发者必须熟练掌握的核心技能。