【潜意识Java】深入理解 Java 面向对象编程(OOP)

news2024/12/15 12:48:50

目录

什么是面向对象编程(OOP)?

1. 封装(Encapsulation)

Java 中的封装

2. 继承(Inheritance)

Java 中的继承

3. 多态(Polymorphism)

Java 中的多态

4. 抽象(Abstraction)

Java 中的抽象类

5. 接口(Interface)

总结


 

在软件开发的世界中,面向对象编程(OOP)是一种非常强大的编程范式,它通过模拟现实世界的对象和它们之间的交互来组织代码。Java,作为一种典型的面向对象编程语言,天然地支持这一编程范式。掌握 Java 中的面向对象编程,将有助于你写出更加高效、灵活且易于维护的代码。

本文将通过实例介绍 Java 中的面向对象编程的核心概念,包括类与对象、继承、多态和封装等。希望通过通俗易懂的讲解,帮助你更好地理解这些概念,并且能够应用到实际的编程中。

什么是面向对象编程(OOP)?

面向对象编程(Object-Oriented Programming, OOP)是一种将程序视为由对象组成的编程方法。每个对象都是类的一个实例,并且每个对象都包含数据(属性)和行为(方法)。OOP 通过“封装、继承和多态”这三大特性来帮助开发者构建高效的程序结构。

d290183c7774494599113bb9644fe5ce.png

 

1. 封装(Encapsulation)

封装是 OOP 中最基本的概念之一,它指的是将对象的属性和方法封装在一起,并通过访问控制来保护数据不被外部直接修改。封装的目的是提高数据的安全性和灵活性。

Java 中的封装

在 Java 中,我们通常通过定义类来封装数据和方法。通过 private 关键字限制访问权限,而通过公共的 getter 和 setter 方法来访问和修改属性。

class Person {
    // 私有属性
    private String name;
    private int age;

    // 公共的 getter 方法
    public String getName() {
        return name;
    }

    // 公共的 setter 方法
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 0) {
            this.age = age;
        } else {
            System.out.println("年龄必须大于0");
        }
    }
}

在上述代码中,Person 类的 nameage 属性被声明为 private,无法直接从外部访问。通过提供公共的 getName()setName() 方法,外部代码可以安全地访问和修改这些属性。

96e2103817a34e2fa676e24681fd155e.jpg

 

2. 继承(Inheritance)

继承是面向对象编程中的一个重要概念,它允许一个类从另一个类继承属性和方法。继承可以帮助我们复用已有的代码,并且支持类的层次结构。

Java 中的继承

Java 中的继承是通过 extends 关键字实现的。子类可以继承父类的属性和方法,还可以重写父类的方法来实现特定的功能。

class Animal {
    void eat() {
        System.out.println("Animal is eating");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("Dog is barking");
    }

    @Override
    void eat() {
        System.out.println("Dog is eating");
    }
}

在这个例子中,Dog 类继承了 Animal 类。它不仅可以访问 Animal 类中的 eat() 方法,还重写了 eat() 方法,使得 Dog 类具有了自己特有的行为。

299eb5ed3dff4f4c89c93bc298293a84.jpg

 

3. 多态(Polymorphism)

多态是指同一方法可以根据不同对象的不同实现产生不同的行为。通过多态,可以用父类类型的变量来指向子类对象,而实际调用的是子类重写的方法。

Java 中的多态

Java 中的多态可以通过方法重载和方法重写来实现。方法重载是同一方法名,根据不同参数类型或数量来区分,而方法重写则是子类对父类方法的重新定义。

class Animal {
    void makeSound() {
        System.out.println("Animal makes sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Cat meows");
    }
}

public class TestPolymorphism {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Animal dog = new Dog();
        Animal cat = new Cat();

        animal.makeSound(); // 输出 "Animal makes sound"
        dog.makeSound();    // 输出 "Dog barks"
        cat.makeSound();    // 输出 "Cat meows"
    }
}

在这个例子中,Animal 类有一个 makeSound() 方法,而 DogCat 类分别重写了该方法。通过父类类型的引用,程序可以表现出不同的行为,这是多态的典型应用。

d01cf784995d4ddda97866329dd1816b.jpg

 

4. 抽象(Abstraction)

抽象是 OOP 中的另一个重要特性,它帮助我们隐藏不必要的实现细节,只暴露必要的接口。抽象通常通过抽象类和接口来实现。

Java 中的抽象类

抽象类是一种不能实例化的类,它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。子类可以继承抽象类并实现其中的抽象方法。

abstract class Shape {
    abstract void draw();

    void color() {
        System.out.println("Coloring the shape");
    }
}

class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a circle");
    }
}

class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a square");
    }
}

5. 接口(Interface)

接口是抽象化的另一种形式,它只定义方法的签名,不能包含方法的实现。类实现接口后,必须实现接口中的所有方法。

interface Animal {
    void sound();
}

class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("Cat meows");
    }
}

通过接口,我们可以让多个不相关的类具备相同的行为,而不需要它们之间存在继承关系。

总结

Java 中的面向对象编程通过封装、继承、多态和抽象等概念,帮助开发者构建清晰、灵活且可维护的代码结构。无论是开发企业级应用,还是编写小型项目,掌握这些基本的 OOP 概念都将大大提高编程效率和代码质量。

  • 封装 提高了数据安全性和代码的可维护性。
  • 继承 提高了代码复用性,减少了重复代码。
  • 多态 使得代码更具灵活性,能够根据实际情况执行不同的操作。
  • 抽象 让我们能够关注重要的业务逻辑,忽略具体的实现细节。

通过不断学习和实践,你将能够将面向对象的设计理念应用到实际项目中,编写出更简洁、优雅且可扩展的代码。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PWM调节DCDC参数计算原理

1、动态电压频率调整DVFS SOC芯片的核电压、GPU电压、NPU电压、GPU电压等,都会根据性能和实际应用场景来进行电压和频率的调整。 即动态电压频率调整DVFS(Dynamic Voltage and Frequency scaling),优化性能和功耗。 比如某SOC在…

OpenCV相关函数

一、二值化函数(threshold) 功能:将灰度图像转换为二值图像,通常用于图像分割。通过设置阈值,把图像中低于阈值的像素设为0,高于阈值的像素设为1。 参数: src:输入图像。 thresh&a…

bean后处理器的作用

这是beanFactory中常见的一些后处理器: 其中这俩个属于bean后处理器: internalAutowiredAnnotationProcessor解析Autowired、Value internalCommonAnnotationProcessor解析Resource、PostConstruct、PreDestroy Bean后处理器的作用:为Bean…

YOLOv11融合[CVPR2024]Starnet中的star block取模块

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《Rewrite the Stars》 一、 模块介绍 论文链接:https://arxiv.org/abs/2403.19967 代码链接:https://github.com/ma-xu/Rewri…

日常灵感:听劝是一种天赋

希望这段分享能给你提供一些新的角度,让你在自己的工作和生活中更好地利用这份“听劝”的天赋! 父与子的救赎:听劝的天赋 学霸爸爸李先生是一个典型的"别人家的父母"。 他从小就是学霸,凭借过硬的学习能力从重点高中一…

The Rise and Potential of Large Language ModelBased Agents:A Survey---讨论

讨论 论法学硕士研究与Agent研究的互利性 近年来,随着激光诱导金属化技术的发展,激光诱导金属化与化学剂交叉领域的研究取得了长足的进步,促进了这两个领域的发展。在此,我们期待着LLM研究和Agent研究相互提供的一些益处和发展机…

React 第十六节 useCallback 使用详解注意事项

useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook,返回一个函数的 memoized的值; 2、如果多次传入的依赖项不变,那么多次定义的时候,返回的值是相同的,防止频繁触发更新; 3、多应用在 父组件为函…

Transformer: Attention Is All You Need (2017) 翻译

论文:Attention Is All You Need 下载地址如下: download: Transformer Attention Is All you need Attention Is All You Need 中文 《Attention Is All You Need》是《Transformer》模型的开创性论文,提出了一种全新的基于注意力机制的架构&#xf…

Git-分支(branch)常用命令

分支 我们在做项目开发的时候,无论是软件项目还是其他机械工程项目,我们为了提高效率以及合理的节省时间等等原因,现在都不再是线性进行,而是将一个项目抽离出诸进行线,每一条线在git中我们就叫做分支,bran…

【AIGC进阶-ChatGPT提示词副业解析】反向心理学在沟通中的运用:激将法的艺术

引言 在日常沟通和管理中,直接的表达方式并不总能达到预期效果。反向心理学,特别是其中的激将法,作为一种独特的沟通技巧,往往能在看似消极的表达中激发出积极的反应。本文将深入探讨反向心理学中激将法的运用技巧、实施策略及其…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展,有力推动了社会的数智化转型;与此同时,带来的相关安全风险也日益凸显。近日,在北京市举办的通明湖人工智能开发与应用大会上,360智脑总裁张向征以“大模型安全研究与实践”为主题&…

lc46全排列——回溯

46. 全排列 - 力扣(LeetCode) 法1:暴力枚举 总共n!种全排列,一一列举出来放入list就行,关键是怎么去枚举呢?那就每次随机取一个,然后删去这个,再从剩下的数组中继续去随机选一个&a…

在线设计平台:Axure新手的在线设计助手

Axure是一款在产品设计、用户体验和交互设计领域广泛使用的强大原型设计工具。它使设计师和产品经理能够迅速构建高保真原型,验证设计和功能,并进行用户测试。结合在线设计平台的协作特性,团队可以更高效地创建、分享和优化原型,加…

Burp与小程序梦中情缘

前言 在日常渗透工作中,有时需要对微信小程序进行抓包渗透,通过抓包,我们可以捕获小程序与服务器之间的通信数据,分析这些数据可以帮助我们发现潜在的安全漏洞,本文通过讲述三个方法在PC端来对小程序抓包渗透 文章目…

gpu硬件架构

1.简介 NVIDIA在视觉计算和人工智能(AI)领域处于领先地位;其旗舰GPU已成为解决包括高性能计算和人工智能在内的各个领域复杂计算挑战所不可或缺的。虽然它们的规格经常被讨论,但很难掌握各种组件的清晰完整的图景。 这些GPU的高性…

SpringCloud集成sleuth和zipkin实现微服务链路追踪

文章目录 前言技术积累spring cloud sleuth介绍zipkin介绍Zipkin与Sleuth的协作 SpringCloud多模块搭建Zipkin Server部署docker pull 镜像启动zipkin server SpringCloud 接入 Sleuth 与 Zipkinpom引入依赖 (springboot2.6)appilication.yml配置修改增加测试链路代码 调用微服…

OBS + SRS:打造专业级直播环境的入门指南

OBS SRS:打造专业级直播环境的入门指南 1. OBS简介2. OBS核心功能详解2.1 场景(Scenes)管理2.2 源(Sources)控制2.3 混音器功能2.4 滤镜与特效2.5 直播控制面板 3. OBS推流到SRS服务器配置指南3.1 环境准备3.2 OBS推流…

Ubuntu K8s

https://serious-lose.notion.site/Ubuntu-K8s-d8d6a978ad784c1baa2fc8c531fbce68?pvs74 2 核 2G Ubuntu 20.4 IP 172.24.53.10 kubeadmkubeletkubectl版本1.23.01.23.01.23.0 kubeadm、kubelet 和 kubectl 是 Kubernetes 生态系统中的三个重要组件 kubeadm: 主…

前端(六)浮动流

浮动流 文章目录 浮动流一、标准流二、浮动流 一、标准流 所谓网页布局就是网页排版的方式,css中有三种网页布局的方式:标准流、浮动流和定位流。 标准流也称文档流,这是浏览器默认的排版方式。标准流中网页的元素会按从左往右、从上往下的…

双内核架构 Xenomai 4 安装教程

Xenomai 4是一种双内核架构, 继承了Xenomai系列的特点,通过在Linux内核中嵌入一个辅助核心(companion core),来提供实时能力。这个辅助核心专门处理那些需要极低且有界响应时间的任务。 本文将在官网教程(https://evlproject.org/…