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

【软件工程】面向对象编程(OOP)概念详解

面向对象(Object-Oriented)是一种程序设计范式,以“对象”为核心,通过封装继承多态抽象等特性,帮助我们构建结构清晰、可维护性高的软件系统。本文将层次分明地介绍 OOP 的核心概念,并配以 Java 示例代码,帮助你快速掌握面向对象编程的思想与实践。


类与对象

  • 类(Class):对一类事物的抽象描述,定义了该类事物拥有的属性(field)和行为(method)。
  • 对象(Object):类的实例,具备类所定义的属性值和行为能力。
// 定义一个“汽车”类
public class Car {// 属性(成员变量)private String brand;private String color;private int speed;// 构造方法public Car(String brand, String color) {this.brand = brand;this.color = color;this.speed = 0;}// 行为(成员方法)public void accelerate(int increment) {speed += increment;System.out.println(brand + " 加速到 " + speed + " km/h");}public void brake(int decrement) {speed = Math.max(0, speed - decrement);System.out.println(brand + " 减速到 " + speed + " km/h");}
}// 在 main 方法中创建对象
public class Main {public static void main(String[] args) {Car myCar = new Car("Tesla Model 3", "红色");myCar.accelerate(50);myCar.brake(20);}
}

封装(Encapsulation)

封装是指将对象的状态(属性)和行为(方法)打包在一起,对外隐藏内部实现细节,只暴露必要的接口。这能有效提高代码的 安全性可维护性

public class Account {private String accountNo;private double balance;public Account(String accountNo, double initBalance) {this.accountNo = accountNo;this.balance = initBalance;}// 存款public void deposit(double amount) {if (amount > 0) {balance += amount;}}// 取款public boolean withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;return true;}return false;}// 对外只暴露余额查询接口public double getBalance() {return balance;}
}
  • private 修饰字段,禁止外部直接访问。
  • 通过 public 方法控制对内部状态的合法操作。

继承(Inheritance)

继承是面向对象的重要特性,通过子类继承父类的属性和方法,实现 代码重用层次结构。子类可对父类行为进行扩展重写(Override)。

// 父类
public class Animal {public void eat() {System.out.println("动物进食");}
}// 子类继承 Animal
public class Dog extends Animal {// 扩展方法public void bark() {System.out.println("小狗汪汪叫");}// 重写父类方法@Overridepublic void eat() {System.out.println("小狗啃骨头");}
}// 测试继承
public class TestInheritance {public static void main(String[] args) {Dog dog = new Dog();dog.eat();  // 输出:小狗啃骨头dog.bark(); // 输出:小狗汪汪叫}
}

多态(Polymorphism)

多态允许同一操作作用于不同类型的对象上,表现出不同的行为。Java 中多态的实现依赖于 方法重写向上转型

public class Cat extends Animal {@Overridepublic void eat() {System.out.println("小猫吃鱼");}
}public class TestPolymorphism {public static void main(String[] args) {Animal a1 = new Dog();  // 向上转型Animal a2 = new Cat();a1.eat(); // 小狗啃骨头a2.eat(); // 小猫吃鱼}
}
  • 变量声明类型为父类,实际引用子类对象。
  • 调用 eat() 时,根据对象的实际类型动态绑定方法。

抽象(Abstraction)与接口(Interface)

  • 抽象类:包含抽象方法(没有实现的方法)的类,不能被实例化,子类必须实现其抽象方法。
  • 接口:纯抽象的“契约”,Java8+ 支持默认方法(default)和静态方法。
// 抽象类示例
public abstract class Shape {// 抽象方法public abstract double area();public void describe() {System.out.println("我是一个图形");}
}// 子类实现
public class Circle extends Shape {private double radius;public Circle(double r) { this.radius = r; }@Overridepublic double area() {return Math.PI * radius * radius;}
}// 接口示例
public interface Drawable {void draw();  // 抽象方法
}// 实现接口
public class Rectangle implements Drawable {@Overridepublic void draw() {System.out.println("绘制矩形");}
}

设计原则简介(SOLID)

为了编写高质量的面向对象代码,还应遵循一些经典设计原则:

  1. Single Responsibility(单一职责)
  2. Open/Closed(开闭原则)
  3. Liskov Substitution(里氏替换)
  4. Interface Segregation(接口隔离)
  5. Dependency Inversion(依赖倒置)

这些原则能让系统更易扩展维护,并提高代码的可测试性

如果觉得不错的话,不妨给作者点个赞!

相关文章:

  • if consteval
  • 9. 使用Gazebo和Rviz显示机器人(包括运动控制,雷达,摄像头仿真以及显示)
  • yum install 失败
  • 政策支持与市场驱动:充电桩可持续发展的双轮引擎
  • cmake qt 项目编译
  • 亚马逊环保标识运营指南:抢占流量新赛道的6大策略解析
  • 对话式 BI:让数据洞察从“专业门槛”变为“对话本能”
  • 【Keil5-开发指南】
  • 使用Docker安装Harbor
  • 机器学习day2
  • 防火墙拦截DNS请求-原理解析
  • 核心要点:线程
  • 机器学习-08-时序数据分析预测
  • IEEE会议:第十届网络安全与信息工程国际会议(ICCSIE 2025)
  • Java后端开发day38--不可变集合Stream流
  • 2799. 统计完全子数组的数目
  • 硅基计划 学习总结 拾
  • 在 cmd shell 中执行 metasploit vbs payload
  • SpringBoot自动配置
  • 【UserDetailsService】
  • 港交所与香港证监会就“中概股回流意向”已与部分相关企业进行接触
  • 国家发改委:我国能源进口来源多元,企业减少甚至停止自美能源进口对国内能源供应没有影响
  • 视觉周刊|2025上海车展的科技范
  • 百岁太极拳大师、陈氏太极拳第十一代嫡宗传人陈全忠逝世
  • 公交公司须关注新出行需求:“单车巴士”能否常态化
  • 葛兰西的三位一体:重提并复兴欧洲共产主义的平民圣人