🧠你真的理解面向对象吗?

前言

初入java时,总是流传着这样一句话万物皆对象,一直没完全理解其中含义,懵懵懂懂的入了行,CRUD干就完了。

然而一入编程深似海,回首已是暮年时,今以此篇直面对象

正文

面向对象具体是指什么

单说面向对象,是一种思想,具体指面向对象编程风格

主流的编程风格有三种,分别是面向过程面向对象函数式编程,面向对象是其中之一。

java就是一种面向对象编程语言,是我们实现程序设计中重要的工具,它满足面向对象编程范式,支持类或对象语法机制且实现了四大特性封装、抽象、继承、多态。

理解面向对象

万物皆对象,万物皆可归类,就是说在面向对象的思想里认为只要是存在的事物,都可以当做一个实例对象,并能找到一种或多种属于它的类。

  • 比如一只小狗作为对象,可以属于宠物类,动物类;
  • 一个人作为对象,可以属于学生类,员工类,人类;
  • 空气作为对象,可以属于空气类;
  • 地球作为对象,可以属于行星类;

但类是抽象的,具体怎么去定义,要看你从哪个角度去思考形容它,以及你的程序想实现的目标:

  • 如果你想实现一个学校人员管理系统,你以人作为对象,则归属为学生类更具体;
  • 如果你想实现一个公司员工考勤系统,你以人作为对象,则归属为员工类更贴合;

类与对象的关系

是对某一类具有共同特征(属性)/行为(方法)的事物的描述;对象是类的具体实例,代表现实世界中真实存在的个体。

但是先有类还是先有对象啊?

从现实生活去看,是先有对象后有类,因为是现有了生活中实实在在的事物,我们才能去归类对它进行描述;

从编程角度去看,是先有类后有对象,因为有了具体对某一个事物抽象的类,我们才能创建对象;

下面我们用代码体现一下,以学生类和员工类举例:

java 复制代码
/**
 * 学生类
 */
public class Student {
    /**
     * 属性(姓名,年龄,班级)
     */
    private String name;
    private Integer age;
    private String className;
    /**
     * 构造方法
     */
    public Student(String name, Integer age, String className) {
        this.name = name;
        this.age = age;
        this.className = className;
    }
    public void read(){
        System.out.println(this.name+"在读书");
    }
    public void write(){
        System.out.println(this.name+"在写字");
    }
}
java 复制代码
/**
 * 员工类
 */
public class Employee {
    /**
     * 属性(姓名,年龄,部门)
     */
    private String name;
    private Integer age;
    private String department;
    /**
     * 构造方法
     */
    public Employee(String name, Integer age, String department) {
        this.name = name;
        this.age = age;
        this.department = department;
    }
    public void toWork(){
        System.out.println(this.name+"上班啦");
    }
    public void offWork(){
        System.out.println(this.name+"下班了");
    }
}

对比可以看到我们定义学生类时有属性班级,定义员工时有属性部门,因为我们抽象出的类结合实际会定义不同的属性;

测试运行:

java 复制代码
public class Test {
    public static void main(String[] args) {
        //通过new对象类创建对象实例并设置属性
        Student xiaoming = new Student("小明",8,"三年级一班");
        Student xiaohong = new Student("小红",9,"四年级二班");
        //调用对象方法
        xiaoming.read();
        xiaohong.write();
    }
}

打印输出:

text 复制代码
小明在读书
小红在写字

总结

你理解对象了吗,以上便是个人对面向对象的总结归纳,明白面向对象之后,后续会跟着讲解四大特性封装、抽象、继承、多态在项目中的实际运用。

道友请留步,求赞+收藏,关注不迷路!!!

相关推荐
杨了个杨89823 分钟前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
IT_陈寒2 小时前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
无风听海2 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
小小前端仔LC2 小时前
Node.js + LangChain + React:搭建个人知识库(六)- “吃什么”项目实战:从700+菜谱入库到Taro H5端JSON渲染
前端·后端
马士兵教育2 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
程序员黑豆3 小时前
AI全栈开发之Java:怎么配置Java环境变量
前端·后端·ai编程
snow@li3 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
云烟成雨TD3 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
苍何3 小时前
一手实测 Claude Fable 5,手搓了个 Obsidian 的 Codex 插件
后端
zfoo-framework3 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java