0

0

在Java中什么是面向对象编程思想_JavaOOP核心思想与基本原则解析

P粉602998670

P粉602998670

发布时间:2026-01-20 08:26:02

|

576人浏览过

|

来源于php中文网

原创

Java强制面向对象编程,所有代码须在类中、行为由对象触发;核心是用类建模共性、对象代表实例,通过封装(private字段+校验setter+安全getter)、继承(is-a语义优先组合)、多态(运行时方法绑定)和抽象/接口(abstract class表“是什么”,interface表“能做什么”)协作实现职责划分与系统扩展性。

在java中什么是面向对象编程思想_javaoop核心思想与基本原则解析

面向对象编程(OOP)在Java中不是一种可选风格,而是强制范式——所有代码必须写在类里,所有行为必须由对象触发。 它的本质是用「类」建模现实事物的共性,用「对象」代表具体实例,再通过封装、继承、多态三者协作完成职责划分与交互。这不是抽象概念,而是直接影响你每天怎么定义变量、调用方法、组织包结构的底层逻辑。

封装:为什么不能直接 public String name?

封装不是“把字段设成 private 就完事”,而是建立可控的数据入口。直接暴露 public String name 会导致外部随意赋值(比如 person.name = ""person.name = null),后续所有依赖 name 的逻辑都可能崩溃。

  • 属性一律用 private 修饰,切断外部直连路径
  • setter 方法里加校验逻辑(如非空、范围、格式),错误时抛异常或设默认值,而非静默失败
  • getter 方法看似简单,但若返回可变对象(如 ArrayList),应考虑防御性拷贝,避免外部修改影响内部状态
public class Person {
    private String name;

    public void setName(String name) {
        if (name == null || name.trim().isEmpty()) {
            throw new IllegalArgumentException("姓名不能为空");
        }
        this.name = name.trim();
    }

    public String getName() {
        return this.name; // 安全:String 不可变
    }
}

继承:extends 不是为复用而存在,而是表达 is-a 关系

滥用 extends 是 Java 初学者最常踩的坑。比如写一个 FileReaderUtils extends FileReader,看似“复用读文件能力”,实则违反语义——FileReaderUtils 并不是一个 FileReader,它只是用到了后者。

  • 只有当子类确实是父类的一种时才用继承(如 Dog extends Animal,因为狗是一种动物)
  • 优先考虑组合(has-a):在类中声明 private FileReader reader,比继承更灵活、更易测试
  • 父类构造方法必须被子类显式或隐式调用;若父类无无参构造,子类 constructor 必须第一行写 super(...)

多态:父类引用指向子类对象,但方法调用取决于运行时类型

多态不是语法糖,它是让系统具备扩展性的关键机制。比如新增一个 Cat 类,只要它继承 Animal 并重写 makeSound(),原有遍历 List<Animal> 的代码完全不用改。

AITDK
AITDK

免费AI SEO工具,SEO的AI生成器

下载

立即学习Java免费学习笔记(深入)”;

  • 多态生效前提是:方法被 override(非 static、非 private、非 final
  • Animal a = new Cat(); a.makeSound(); 调用的是 Cat 的实现,不是 Animal
  • 注意字段不具多态性:a.name 取的是 Animal 类中定义的 name,和实际对象类型无关

抽象与接口:什么时候该用 abstract class,什么时候用 interface?

Java 8+ 后两者界限模糊,但语义依然清晰:abstract class 表达「是什么」,interface 表达「能做什么」。

  • 有共同状态(字段)或部分通用实现?选 abstract class(如所有 Vehicle 都有 speed 字段和 startEngine() 基础逻辑)
  • 定义能力契约、支持多实现、需默认方法或静态方法?选 interface(如 RunnableComparable
  • Java 不允许多继承类,但一个类可 implements 多个 interface,这是解耦的关键杠杆

真正难的从来不是语法,而是判断「这个逻辑该放在类里、父类里、接口默认方法里,还是干脆抽成工具类」——这需要对业务边界和变化点的持续敏感。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1031

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.3万人学习

Java 教程
Java 教程

共578课时 | 81.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号