当前位置: 首页 > news >正文

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中,继承允许我们创建一个类族谱,使得子类可以继承父类的属性和方法,从而实现代码的复用和扩展。

示例代码:

// 定义一个父类 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);}@Overridepublic void makeSound() {System.out.println("Woof woof!");}
}// 定义另一个子类 Cat,继承自 Animal
public class Cat extends Animal {public Cat(String name, int age) {super(name, age);}@Overridepublic 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中,多态允许我们编写更加灵活和通用的代码,通过多态,同一段代码可以处理不同类型的对象,具体的行为由运行时对象的实际类型决定。

示例代码:

// 定义一个图形接口 Shape
public interface Shape {double calculateArea();
}// 实现 Shape 接口的 Circle 类
public class Circle implements Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic 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;}@Overridepublic 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.53981633974483System.out.println("Rectangle area: " + rectangle.calculateArea()); // 输出: Rectangle area: 24.0}
}

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


设计模式与面向对象原则

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

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

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

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

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

http://www.lryc.cn/news/399300.html

相关文章:

  • 0145__Linux的capability
  • # Redis 入门到精通(一)数据类型(4)
  • 西邮计科嵌入式复习
  • Java如何使用 HttpClientUtils 发起 HTTP 请求
  • 无人机的工作原理
  • 敏捷开发笔记(第10章节)--Liskov原则(LSP)
  • 基于SSM的校园一卡通管理系统的设计与实现
  • 新版Android Studio中设置gradle的JDK版本
  • 打造你的智能家居指挥中心:基于STM32的多协议(zigbee、http)网关(附代码示例)
  • 【基于R语言群体遗传学】-16-中性检验Tajima‘s D及连锁不平衡 linkage disequilibrium (LD)
  • 防火墙组网与安全策略实验
  • xmind梳理测试点,根据这些测试点去写测试用例
  • MICCAI 2024 每日一篇论文 纯纯直读 CUTS:用于多粒度无监督医学图像分割的深度学习和拓扑框架
  • 实验9 存储过程与函数的创建管理实验
  • 计算机网络--tcpdump和iptable设置、内核参数优化策略
  • Vue3框架搭建2:axios+typescript封装
  • 【机器学习】使用决策树分类器预测汽车安全性的研究与分析
  • 【香橙派 Orange pi AIpro】| 开发板深入使用体验
  • 初识Laravel(Laravel的项目搭建)
  • RequestContextHolder多线程获取不到request对象
  • 打造高效工作与生活质量的完美平衡
  • 【零基础】学JS之APIS第四天
  • 走进linux
  • 智能家居开发新进展:乐鑫 ESP-ZeroCode 与亚马逊 ACK for Matter 实现集成
  • 本地事务和分布式事务
  • 昇思25天学习打卡营第14天|基于MindNLP的文本解码原理
  • Base64文件流查看下载PDF方法-CSDN
  • 基于TCP的在线词典系统(分阶段实现)(阻塞io和多路io复用(select)实现)
  • 设置DepthBufferBits和设置DepthStencilFormat的区别
  • MySQL零散拾遗