Java三剑客:封装、继承、多态的魔法世界

第一章:封装的艺术 ------ 保护你的宝藏

案例分析:银行账户系统

想象一下,你正在构建一个银行账户系统。每个账户都有一个余额,这个余额需要受到严格的保护,不能被随意修改。我们可以通过封装来实现这一目标。

示例代码:

java 复制代码
public class BankAccount {
    private double balance; // 私有变量,不允许直接访问

    public BankAccount(double initialBalance) {
        if (initialBalance > 0.0) {
            balance = initialBalance;
        } else {
            balance = 0.0;
        }
    }

    // 提供公共方法存款
    public void deposit(double amount) {
        if (amount > 0.0) {
            balance += amount;
        }
    }

    // 提供公共方法取款
    public boolean withdraw(double amount) {
        if (amount <= balance) {
            balance -= amount;
            return true;
        } else {
            return false;
        }
    }

    // 提供公共方法查询余额
    public double getBalance() {
        return balance;
    }
}

在这个例子中,balance被声明为私有变量,只能通过deposit()withdraw()getBalance()方法进行访问和修改。这样,我们就能确保账户的安全性和一致性。


第二章:继承的传承 ------ 父亲的衣钵

案例分析:动物王国

在Java中,继承允许我们创建一个类族谱,使得子类可以继承父类的属性和方法,从而实现代码的复用和扩展。

示例代码:

java 复制代码
// 定义一个父类 Animal
public abstract class Animal {
    protected String name;
    protected int age;

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

    public abstract void makeSound(); // 抽象方法,强制子类实现
}

// 定义一个子类 Dog,继承自 Animal
public class Dog extends Animal {
    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void makeSound() {
        System.out.println("Woof woof!");
    }
}

// 定义另一个子类 Cat,继承自 Animal
public class Cat extends Animal {
    public Cat(String name, int age) {
        super(name, age);
    }

    @Override
    public void makeSound() {
        System.out.println("Meow meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog("Buddy", 3);
        Animal myCat = new Cat("Whiskers", 2);

        myDog.makeSound();   // 输出: Woof woof!
        myCat.makeSound();   // 输出: Meow meow!
    }
}

在这个例子中,Animal类作为基类,定义了一个makeSound()抽象方法,所有继承自它的子类(如DogCat)都必须实现这个方法。这样,我们就能够通过一个统一的接口(即Animal类)来处理不同类型的动物,体现了继承的优势。


第三章:多态的魔法 ------ 变身大师的技能

案例分析:图形绘制系统

在Java中,多态允许我们编写更加灵活和通用的代码,通过多态,同一段代码可以处理不同类型的对象,具体的行为由运行时对象的实际类型决定。

示例代码:

java 复制代码
// 定义一个图形接口 Shape
public interface Shape {
    double calculateArea();
}

// 实现 Shape 接口的 Circle 类
public class Circle implements Shape {
    private double radius;

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

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

// 实现 Shape 接口的 Rectangle 类
public class Rectangle implements Shape {
    private double width;
    private double height;

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

    @Override
    public double calculateArea() {
        return width * height;
    }
}

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

        System.out.println("Circle area: " + circle.calculateArea()); // 输出: Circle area: 78.53981633974483
        System.out.println("Rectangle area: " + rectangle.calculateArea()); // 输出: Rectangle area: 24.0
    }
}

在这个例子中,我们定义了一个Shape接口,以及两个实现该接口的类CircleRectangle。通过多态,我们可以使用Shape类型的引用指向任何实现了Shape接口的对象,并调用其calculateArea()方法。这样,我们就可以写出通用的代码,处理任意形状的图形,极大地提高了代码的灵活性和可扩展性。


设计模式与面向对象原则

深入理解封装、继承和多态之后,你将发现它们是许多高级编程概念和设计模式的基础。比如:

  • 单一职责原则 :一个类应该只有一个引起它变化的原因,这正是封装思想的体现。例如,在BankAccount类中,我们通过将balance设置为私有变量,并提供公共方法来操作它,确保了账户的职责清晰。

  • 开放封闭原则 :对扩展开放,对修改关闭。继承和多态机制是实现这一原则的关键。例如,在Animal类的例子中,我们定义了一个抽象方法makeSound(),所有的子类都必须实现这个方法。这样,当我们需要添加新的动物类型时,只需创建一个新的子类即可,无需修改现有代码。

  • 工厂模式:这是一种常用的创建型设计模式,用于封装对象的创建过程。通过工厂方法,我们可以根据传入的参数动态地创建对象,而无需指定具体的类。结合继承和多态,工厂模式可以提供非常灵活的对象创建机制。

  • 策略模式:这是一种行为型设计模式,允许在运行时选择算法或行为。通过定义一组算法接口,然后让不同的策略类实现这些接口,我们可以根据实际需求动态地切换策略,这充分体现了多态的灵活性。

相关推荐
程序员南飞1 小时前
ps aux | grep smart_webrtc这条指令代表什么意思
java·linux·ubuntu·webrtc
弥琉撒到我1 小时前
微服务swagger解析部署使用全流程
java·微服务·架构·swagger
一颗花生米。2 小时前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
问道飞鱼2 小时前
Java基础-单例模式的实现
java·开发语言·单例模式
学习使我快乐012 小时前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
通信仿真实验室3 小时前
(10)MATLAB莱斯(Rician)衰落信道仿真1
开发语言·matlab
勿语&3 小时前
Element-UI Plus 暗黑主题切换及自定义主题色
开发语言·javascript·ui
ok!ko6 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2402_857589366 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰7 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin