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

【java第19集】java面向对象编程详解

文章目录

  • 一、面向对象的核心思想
  • 二、类与对象
    • 1. 类(Class)
    • 2. 对象(Object)
    • 3. 代码示例
  • 三、封装(Encapsulation)
    • 1. 定义
    • 2. 核心思想
    • 3. 代码示例
    • 4. 应用场景
  • 四、继承(Inheritance)
    • 1. 定义
    • 2. 核心思想
    • 3. 代码示例
    • 4. 关键字
  • 五、多态(Polymorphism)
    • 1. 定义
    • 2. 多态的类型
    • 3. 代码示例
    • 4. 应用场景
  • 六、抽象类(Abstract Class)
  • 七、接口(Interface)
  • 八、构造方法(Constructor)
  • 九、`this` 和 `super` 关键字
  • 总结

Java的面向对象编程(Object-Oriented Programming, OOP)是Java语言的核心思想,其核心目标是通过对象的抽象,将复杂的现实问题分解为可管理的模块化代码。以下是Java面向对象思想的详细介绍:


一、面向对象的核心思想

面向对象编程(OOP)的三大核心特性是:

  1. 封装(Encapsulation)
  2. 继承(Inheritance)
  3. 多态(Polymorphism)

这三大特性共同构成了Java程序设计的基础,帮助开发者构建模块化、可复用和易维护的代码。


二、类与对象

1. 类(Class)

  • 定义:类是对象的模板,描述了一类事物的属性(数据)和行为(方法)。
  • 特点:类是抽象的,例如“人类”是一个类,包含属性(如姓名、年龄)和行为(如吃饭、走路)。

2. 对象(Object)

  • 定义:对象是类的具体实例,是实际存在的个体。
  • 特点:对象是具体的,例如“张三”是“人类”的一个实例。

3. 代码示例

// 定义类
public class Person {// 属性(字段)private String name;private int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 行为(方法)public void eat() {System.out.println(name + " is eating.");}
}// 创建对象
public class Main {public static void main(String[] args) {Person person = new Person("Alice", 25);person.eat(); // 调用对象的方法}
}

三、封装(Encapsulation)

1. 定义

  • 将对象的数据(属性)和操作数据的方法(行为)捆绑在一起,并通过访问控制符(privatepublic等)限制外部对内部实现的直接访问。

2. 核心思想

  • 隐藏实现细节:外部只能通过公开的接口(getter/setter)与对象交互,而无需了解内部实现。
  • 数据保护:防止非法操作导致数据不一致。

3. 代码示例

public class BankAccount {// 私有属性:外部无法直接访问private double balance;// 公开的getter/setterpublic double getBalance() {return balance;}public void deposit(double amount) {if (amount > 0) {balance += amount;} else {System.out.println("存款金额必须为正数");}}
}

4. 应用场景

  • 安全性要求高的场景:如银行账户、用户权限管理。
  • 简化接口设计:通过封装减少外部依赖。

四、继承(Inheritance)

1. 定义

  • 子类通过继承父类,可以复用父类的属性和方法,从而实现代码复用和扩展。

2. 核心思想

  • 代码复用:避免重复编写相同功能的代码。
  • 层次化设计:通过继承构建类的层次结构(如动物类 → 狗类 → 哈士奇类)。

3. 代码示例

// 父类
public class Animal {public void eat() {System.out.println("Animal is eating.");}
}// 子类继承父类
public class Dog extends Animal {@Overridepublic void eat() {System.out.println("Dog is eating bones.");}public void bark() {System.out.println("Dog is barking.");}
}// 使用继承
public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.eat();   // 调用子类重写的方法dog.bark();  // 调用子类特有方法}
}

4. 关键字

  • extends:用于类的继承。
  • super:调用父类的构造方法或方法。

五、多态(Polymorphism)

1. 定义

  • 同一操作作用于不同的对象,可以有不同的解释和行为。
  • 核心思想:通过方法重写动态绑定实现灵活性。

2. 多态的类型

  1. 编译时多态(静态多态):方法重载(Overloading)。同一个类中可以有多个同名方法,只要它们的参数列表不同(参数类型、数量或顺序)。
  2. 运行时多态(动态多态):方法重写(Overriding)和父类引用指向子类对象。子类继承父类方法,方法相同,参数类型一样。

3. 代码示例

// 方法重写实现多态
public class Animal {public void sound() {System.out.println("Animal makes a sound.");}
}public class Cat extends Animal {@Overridepublic void sound() {System.out.println("Cat meows.");}
}public class Main {public static void main(String[] args) {Animal myAnimal = new Cat(); // 父类引用指向子类对象myAnimal.sound(); // 输出 "Cat meows."}
}

4. 应用场景

  • 通用接口设计:如支付系统中的 PayStrategy 接口,支持多种支付方式(支付宝、微信)。
  • 框架开发:如 Java 的集合框架(List 接口的多种实现类)。

六、抽象类(Abstract Class)

  • 定义:包含抽象方法(没有实现的方法)的类,不能直接实例化。

  • 用途:作为其他类的基类,强制子类实现特定方法。

  • 代码示例

    public abstract class Shape {public abstract double area(); // 抽象方法
    }public class Circle extends Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double area() {return Math.PI * radius * radius;}
    }
    

七、接口(Interface)

  • 定义:接口是比抽象类更抽象的“类”,可以包含常量、抽象方法和默认方法。

  • 用途:实现多重继承(Java 不支持类的多继承,但一个类可以实现多个接口)。

  • 代码示例

    public interface Flyable {void fly(); // 抽象方法
    }public class Bird implements Flyable {@Overridepublic void fly() {System.out.println("Bird is flying.");}
    }
    

八、构造方法(Constructor)

  • 特点

    • 与类名相同,无返回值。
    • 用于初始化对象。
    • 可以重载(多个构造方法)。
  • 代码示例

    public class Student {private String name;private int age;// 无参构造方法public Student() {}// 有参构造方法public Student(String name, int age) {this.name = name;this.age = age;}
    }
    

九、thissuper 关键字

  • this:指向当前对象的引用,用于区分成员变量和局部变量。
  • super:指向父类对象的引用,用于调用父类的构造方法或方法。
  • 代码示例
    public class Parent {public Parent() {System.out.println("Parent constructor");}
    }public class Child extends Parent {public Child() {super(); // 调用父类构造方法System.out.println("Child constructor");}
    }
    

总结

Java的面向对象思想通过对象的抽象,将现实世界的问题转化为程序中的模块化设计。其核心特性(封装、继承、多态)和工具(接口、抽象类、访问控制)共同提升了代码的复用性可维护性扩展性

  • 面向对象开发优势
    • 代码复用:通过继承和组合减少重复代码。
    • 安全性:封装保护数据,防止非法访问。
    • 灵活性:多态支持动态行为,适应不同场景。
    • 可维护性:模块化设计便于调试和升级。
http://www.xdnf.cn/news/7804.html

相关文章:

  • MyBatis:简化数据库操作的持久层框架
  • 高噪声下扩展边缘检测算子对检测边缘的影响
  • windows powershell 判断 进程号是否存在
  • 无人机桥梁巡检
  • linux文件重命名命令
  • MIL-C-5015航空插头2芯震动加速度传感器连接器
  • 五、【API 开发篇(下)】:使用 Django REST Framework构建测试用例模型的 CRUD API
  • 云原生安全之PaaS:从基础到实践的技术指南
  • 谈谈 Kotlin 中的构造方法,有哪些注意事项?
  • 【Django系统】Python+Django携程酒店评论情感分析系统
  • 【Java微服务组件】异步通信P2—Kafka与消息
  • [杂学笔记]浏览器多进程与多线程架构、wstring类型、哈希表、红黑树与哈希表的对比、C++标准库Random类
  • 影响镍钯金PCB表面处理价格的因素有哪些?
  • Spring事务简单操作
  • 【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)
  • vue-cli 构建打包优化(JeecgBoot-Vue2 配置优化篇)
  • Hadoop-HA高可用集群启动nameNode莫名挂掉,排错解决
  • digitalworld.local: FALL靶场
  • Mysql-数据闪回工具MyFlash
  • SQL查询, 响应体临时字段报: Unknown column ‘data_json_map‘ in ‘field list‘
  • leetcode 92. Reverse Linked List II
  • 张 Prompt Tuning--中文数据准确率提升:理性与冲动识别新突破
  • 分类算法 Kmeans、KNN、Meanshift 实战
  • maven之pom.xml
  • 【25软考网工】第七章(3) UOS Linux防火墙配置和Web应用服务配置
  • OpenHarmony外设驱动使用 (九),Pin_auth
  • 国产化Excel处理组件Spire.XLS for .NET系列教程:通过 C# 将 TXT 文本转换为 Excel 表格
  • 物业后勤小程序源码介绍
  • 【项目记录】准备工作及查询部门
  • python-leetcode 71.每日温度