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

目录

什么是面向对象编程(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");}@Overridevoid 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 {@Overridevoid makeSound() {System.out.println("Dog barks");}
}class Cat extends Animal {@Overridevoid 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 {@Overridevoid draw() {System.out.println("Drawing a circle");}
}class Square extends Shape {@Overridevoid draw() {System.out.println("Drawing a square");}
}

5. 接口(Interface)

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

interface Animal {void sound();
}class Dog implements Animal {@Overridepublic void sound() {System.out.println("Dog barks");}
}class Cat implements Animal {@Overridepublic void sound() {System.out.println("Cat meows");}
}

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

总结

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

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

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

 

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

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

相关文章

【Linux SH脚本】LinuxCheck 应急检查信息脚本

LinuxCheck 1.下载地址 【Linux SH脚本】LinuxCheck 应急检查信息脚本 2.简介 LinuxCheck 是一个开源的自动化检查脚本,旨在快速检测 Linux 系统的安全配置和潜在问题。它支持多种发行版,能够扫描并生成详细的报告,涵盖用户管理、权限配置…

docker 部署 redis

docker 部署 redis 1. 下载 redis 镜像 # docker images | grep redis bitnami/redis 7.2.4-debian-11-r5 45de196aef7e 10 months ago 95.2MB2. docker-compose 部署 version: "3" services:redis:image: bitnami/redis:7.2.4-debian-11-…

相机测距原理

基础概念的回顾 焦距的定义 焦距是指透镜或镜头的光学中心(通常是透镜的几何中心)到其焦点的距离。 焦点是光线的交点,它指的是透镜或镜头聚焦所有入射光线后汇聚的位置。焦点的位置与透镜的曲率和光线的入射角度相关。就是说所有光线经过…

Python粉色圣诞树

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

数据分析学习Day1-使用matplotlib生成2小时每分钟的气温可视化分析图

注意:需要提前下载matplotlib包 pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple import matplotlib.pyplot as plt import random from matplotlib import font_manager # 数据准备 x list(range(121)) # 使用 list() 转换为列表 y [rando…

uniapp uni-table最简单固定表头

需求:固定表头数据,在网上找了半天,啥都有,就是一直实现不了,最后更改代码实现 1.效果 2.主要代码讲解完整代码 表格的父级一定要设置高度,不然会错位,我看网上说设置position:fixed…

HTML、CSS表格的斜表头样式设置title 画对角线

我里面有用到layui框架的影响&#xff0c;实际根据你自己的框架来小调下就可以 效果如下 上代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

【人工智能】OpenAI O1模型:超越GPT-4的长上下文RAG性能详解与优化指南

在人工智能&#xff08;AI&#xff09;领域&#xff0c;长上下文生成与检索&#xff08;RAG&#xff09; 已成为提升自然语言处理&#xff08;NLP&#xff09;模型性能的关键技术之一。随着数据规模与应用场景的不断扩展&#xff0c;如何高效地处理海量上下文信息&#xff0c;成…

学习笔记069——Java集合框架

文章目录 集合1、List 接口2、Set 接口3、Map3.1、Map 常用实现类 集合 需要创建多个对象&#xff0c;但是数量和类型不确定。 集合是 Java 提供的一种类型&#xff0c;功能和数组类似&#xff0c;但是长度和数据类型都是动态。 集合框架&#xff08;包括很多类和接口&#…

Baumer工业相机的EMVA1288 数据报告简介

项目场景&#xff1a; Baumer工业相机堡盟VCX系列和VLX系列为堡盟全系列相机中的主流常用相机和高端相机&#xff0c;性能强大、坚固可靠&#xff0c;易于集成&#xff0c;常用与一般行业的检测定位识别使用。 对应的高端相机系列具有极为丰富的强大技术功能&#xff0c;可轻…

游戏引擎学习第45天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程&#xff0c;展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹&#xff0c;而另一版本是角色会完全停下来。这种方式感觉不太自然&#xff0c;因为在游戏中&#xff0c;…

Django基础之模板

一.前言 前面我们讲了视图&#xff0c;我们今天来讲一下模板&#xff0c;模板其实也就是视图中render返回的html进行的渲染&#xff0c;然后展示到浏览器页面上去&#xff0c;那我们今天就来和大家来说一下模板的基本用法 二.寻找html模板 这个也就是我们前面说了的找html&a…

每天40分玩转Django:简介和环境搭建

Django简介和环境搭建 一、课程概述 学习项目具体内容预计用时Django概念Django框架介绍、MVC/MTV模式、Django特点60分钟环境搭建Python安装、pip配置、Django安装、IDE选择45分钟创建项目项目结构、基本配置、运行测试75分钟实战练习创建个人博客项目框架60分钟 二、Djang…

elasticsearch设置默认账号密码

1.进入elasticsearch的bin目录下&#xff0c;输入命令&#xff1a; elasticsearch-setup-passwords interactive 2.输入对应的账号密码&#xff0c;然后重启elasticsearch&#xff0c;用对应的账号密码登录访问即可

用拉普拉斯变换的方差算法实现相机自动对焦

使用拉普拉斯变换的方差来计算图像的清晰度的主要原因是拉普拉斯算子可以有效检测图像的边缘和高频细节。图像的清晰度与边缘强度和高频分量的丰富程度密切相关,以下是更详细的解释: 1. 拉普拉斯算子的作用 拉普拉斯算子是一种二阶导数算子,定义为: 它可以在图像中检测快…

基于Sharding-jdbc实现水平分库、垂直分库、读写分离

一、实现水平分库 需求说明 水平分库是把同一个表的数据按一定规则拆到不同的数据库中&#xff0c;每个库可以放在不同的服务器上。 接下来咱们继续对快速入门中的例子进行完善。 实现步骤 将原有order_db库拆分为order_db_1、order_db_2 CREATE DATABASE order_db_1 CHAR…

基于前后端分离的食堂采购系统源码:从设计到开发的全流程详解

本篇文章&#xff0c;笔者将从系统设计到开发的全过程进行详解&#xff0c;帮助开发者和企业了解如何高效构建一套完善的食堂采购系统。 一、系统需求分析 在开发一套基于前后端分离的食堂采购系统前&#xff0c;必须对业务需求和功能模块进行详细分析&#xff0c;确保系统设…

第三十一章 Spring之假如让你来写事务——融入IOC容器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

【笔记】记录一个python初见的语法(一)

在看书里的代码时了解了一个python的语法知识&#xff0c;是有关class类的。 代码如下&#xff1a; class Vocab: #save"""文本词表"""def __init__(self, tokensNone, min_freq0, reserved_tokensNone):if tokens is None:tokens []if rese…

LabVIEW面向对象编程有什么特点?

LabVIEW面向对象编程&#xff08;OOP&#xff09;的特点主要体现在它如何结合传统面向对象编程&#xff08;OOP&#xff09;的理念与LabVIEW的图形化编程模式&#xff0c;提供灵活的抽象和模块化的功能。以下是LabVIEW面向对象编程的几个主要特点&#xff1a; ​ 1. 类&#x…