Java 面向对象编程(OOP)(4/30)

目录

Java 面向对象编程(OOP)

1. 类与对象

1.1 类的定义

1.2 对象的创建与使用

2. 封装

2.1 访问修饰符

2.2 使用 Getter 和 Setter 方法

3. 继承

3.1 继承的基本用法

3.2 方法重写

4. 多态

4.1 编译时多态(方法重载)

4.2 运行时多态(方法重写)

5. 面向对象编程的优势

总结与后续


Java 面向对象编程(OOP)

面向对象编程(Object-Oriented Programming, OOP)是 Java 语言的核心思想之一。OOP 提供了一种以对象为中心的编程方式,使得代码更加模块化、可重用且易于维护。本模块将介绍 Java 中的 OOP 基本概念,包括 类与对象继承封装多态,并通过代码示例帮助你掌握这些核心概念。

1. 类与对象

(Class)是对象的模板或蓝图,它定义了对象的属性和行为。对象(Object)是类的实例,是类的具体实现。

1.1 类的定义

类是 Java 程序的基本组成部分,用于定义对象的属性和行为。

示例

public class Car {// 属性(成员变量)String color;int speed;// 方法(行为)void start() {System.out.println("汽车启动");}void stop() {System.out.println("汽车停止");}
}

在这个例子中,Car 类有两个属性:colorspeed,以及两个方法:start()stop()

1.2 对象的创建与使用

通过 new 关键字可以创建类的对象,然后通过对象调用类的方法或访问属性。

示例

public class Main {public static void main(String[] args) {// 创建 Car 类的对象Car myCar = new Car();myCar.color = "红色";myCar.speed = 100;// 调用对象的方法myCar.start();System.out.println("汽车颜色: " + myCar.color);myCar.stop();}
}

在这个例子中,我们创建了 Car 类的对象 myCar,并设置了属性 colorspeed,然后调用了 start()stop() 方法。

2. 封装

封装(Encapsulation)是一种将数据和操作数据的方法捆绑在一起的机制,目的是隐藏类的内部细节,只对外暴露必要的接口。这有助于提高代码的安全性和可维护性。

2.1 访问修饰符

Java 提供了访问修饰符来实现封装:

  • public:类、方法或属性对所有代码可见。

  • private:类的成员只能在该类内部访问,无法从外部访问。

  • protected:类的成员可以被同一包中的其他类或其子类访问。

  • 默认(无修饰符):类的成员可以被同一包中的其他类访问。

2.2 使用 Getter 和 Setter 方法

为了实现封装,我们通常将属性设置为 private,并通过 publicgettersetter 方法来访问和修改属性。

示例

public 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");}}
}

在这个例子中,nameage 是私有的,外部不能直接访问它们。通过 getName()setName(),可以安全地访问和修改 name

3. 继承

继承(Inheritance)是面向对象编程的重要特性,用于创建一个新类,该新类可以继承现有类的属性和方法。通过继承,可以实现代码重用。

3.1 继承的基本用法

  • extends 关键字用于声明一个类继承另一个类。

  • 父类(超类):被继承的类。

  • 子类:继承父类的类。

示例

// 父类
public class Animal {void eat() {System.out.println("动物在吃东西");}
}// 子类
public class Dog extends Animal {void bark() {System.out.println("狗在叫");}
}public class Main {public static void main(String[] args) {Dog myDog = new Dog();myDog.eat();  // 调用继承自父类的方法myDog.bark(); // 调用子类的方法}
}

在这个例子中,Dog 类继承了 Animal 类,因此 Dog 类可以使用 Animal 类的 eat() 方法。

3.2 方法重写

方法重写(Method Overriding)是子类提供对从父类继承的方法的具体实现。

  • 使用 @Override 注解标记重写的方法。

  • 子类可以提供自己的实现来覆盖父类的方法。

示例

public class Dog extends Animal {@Overridevoid eat() {System.out.println("狗在吃狗粮");}
}

在这个例子中,Dog 类重写了 Animal 类的 eat() 方法。

4. 多态

多态(Polymorphism)是 OOP 的另一个重要特性,它允许相同的操作作用于不同的对象。多态的实现有两种方式:编译时多态(方法重载)和运行时多态(方法重写)。

4.1 编译时多态(方法重载)

方法重载(Method Overloading)是在同一个类中定义多个方法,这些方法具有相同的名字,但参数不同(参数类型或参数个数不同)。

示例

public class MathUtils {// 方法重载int add(int a, int b) {return a + b;}double add(double a, double b) {return a + b;}
}

在这个例子中,add() 方法被重载了,分别用于处理整数和浮点数的相加。

4.2 运行时多态(方法重写)

运行时多态通过方法重写实现,父类的引用可以指向子类的对象,调用的方法根据引用指向的对象类型来确定。

示例

public class Main {public static void main(String[] args) {Animal myAnimal = new Dog();  // 父类引用指向子类对象myAnimal.eat();  // 调用 Dog 类的 eat() 方法}
}

在这个例子中,虽然 myAnimal 的类型是 Animal,但它指向 Dog 对象,因此调用的是 Dog 类的 eat() 方法。

5. 面向对象编程的优势

  • 模块化:将功能封装在类中,使代码更加模块化。

  • 代码重用:通过继承和组合可以重用已有的代码。

  • 灵活性和可维护性:通过多态和接口,可以更灵活地扩展代码,提高可维护性。

总结与后续

在本模块中,我们学习了 Java 的面向对象编程概念,包括类与对象、封装、继承和多态。这些概念是 Java 编程的重要基础,使得代码更加结构化和可维护。

在下一模块中,我们将深入探讨 Java 中的 抽象类接口,学习如何通过抽象和接口提高代码的灵活性和复用性,进一步掌握 Java 的面向对象特性。

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

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

相关文章

NVR设备ONVIF接入平台EasyCVR视频分析设备平台视频质量诊断技术与能力

视频诊断技术是一种智能化的视频故障分析与预警系统,NVR设备ONVIF接入平台EasyCVR通过对前端设备传回的码流进行解码以及图像质量评估,对视频图像中存在的质量问题进行智能分析、判断和预警。这项技术在安防监控领域尤为重要,因为它能够确保监…

记录一个跳跃的小游戏

记录一个跳跃的小游戏 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…

ansible详细介绍和具体步骤

Ansible简介 1.1 Ansible的基本概念 Ansible是一款开源的自动化工具&#xff0c;旨在简化IT操作的复杂性。它由Michael DeHaan创建&#xff0c;并于2012年发布&#xff0c;随后在2015年被Red Hat收购。Ansible的核心理念是“简单即美”&#xff0c;它通过使用YAML&#xff08…

Python Pycharm下载

pycharm-professional-2023.3.3 python-3.9.0-amd64.exe 链接&#xff1a;https://pan.baidu.com/s/1YYf835hlleeDksPMmX9y2g?pwd9x16 提取码&#xff1a;9x16 更多资料获取学习书籍下面搜一搜这里不迷路&#xff0c;回复关键字获取&#xff1a;python

探秘 Feign 核心注解:@FeignClient 和 @EnableFeignClients 是如何打通微服务通信的 “任督二脉” 的?

前两篇文章揭秘 Feign 调用机制&#xff1a;微服务通信的无缝集成和微服务通信背后的秘密&#xff1a;Ribbon 如何选择最佳服务实例&#xff1f;&#xff0c;我们已经了解到 Feign 调用机制的一大优势 —— 在不需要指定域名的情况下&#xff0c;能够借助 Ribbon 精准地找到并调…

比较24个结构的迭代次数

(A,B)---6*30*2---(0,1)(1,0) 让A是结构1&#xff0c;让B全是0。收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值&#xff0c;得到28080.98 做一个同样的网络(A,B)---6*30*2---(0,1)(1,0)&#xff0c;让A是结构1-24&#xff0c;B全是0&#xff0c;用结构1的收敛权重做初…

Python unstructured库详解:partition_pdf函数完整参数深度解析

Python unstructured库详解&#xff1a;partition_pdf函数完整参数深度解析 1. 简介2. 基础文件处理参数2.1 文件输入参数2.2 页面处理参数 3. 文档解析策略3.1 strategy参数详解3.2 策略选择建议 4. 表格处理参数4.1 表格结构推断 5. 语言处理参数5.1 语言设置 6. 图像处理参数…

CentOS9 Stream上安装Edge浏览器

CentOS9 Stream上安装Edge浏览器 1. 下载 Microsoft Edge RPM 包2. 安装 Edge 浏览器3. 启动 Microsoft Edge4. 更新 Microsoft Edge&#xff08;可选&#xff09; 如果运行的时候出现错误&#xff1a;[5809:5809:1030/234136.530802:ERROR:zygote_host_impl_linux.cc(101)] Ru…

深度了解flink(七) JobManager(1) 组件启动流程分析

前言 JobManager是Flink的核心进程&#xff0c;主要负责Flink集群的启动和初始化&#xff0c;包含多个重要的组件(JboMaster&#xff0c;Dispatcher&#xff0c;WebEndpoint等)&#xff0c;本篇文章会基于源码分析JobManagr的启动流程&#xff0c;对其各个组件进行介绍&#x…

.NET内网实战:通过白名单文件反序列化漏洞绕过UAC

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧&#xff0c;对内网和后渗透感兴趣的朋友们可以订阅该电子报刊&#xff0c;解锁更多的报刊内容。 02基本介绍 03原理分析 在渗透测试和红…

ELK之路第三步——日志收集筛选logstash和filebeat

logstash和filebeat&#xff08;偷懒版&#xff09; 前言logstash1.下载2.修改配置文件3.测试启动4.文件启动 filebeat1.下载2.配置3.启动 前言 上一篇&#xff0c;我们说到了可视化界面Kibana的安装&#xff0c;这一篇&#xff0c;会简单介绍logstash和filebeat的安装和配置。…

20 Docker容器集群网络架构:三、Docker集群部署

文章目录 Docker容器集群网络架构:三、Docker集群离线部署3.1 环境准备3.1.1 配置主机名3.1.2 关闭firewall防火墙3.1.3 关闭iptables防火墙3.1.3.1 安装iptables3.1.3.2 禁用iptables3.1.3.3 清空防火墙规则3.1.4 关闭selinux3.1.4.1 临时关闭3.1.4.2 永久关闭3.1.4.3 查询关…

分别用webpack和vite注册全局组件

基础组件的自动化全局注册 1. 组件全部导入后&#xff0c;批量注册 import dgDialog from "/components/dgDialog/index.vue"; import svgIcon from "/components/svgIcon/index.vue"; const allComponent { dgDialog, svgIcon }; export default {inst…

二十六、Python基础语法(函数进阶-下)

一、多值参数 多值参数&#xff08;可变参数、不定长参数&#xff09;&#xff1a;有的函数不确定参数有几个&#xff0c;在一个普通的参数前面加上一个*&#xff0c;这个参数就变为不定参数。可以接收任意多个位置传参的数据&#xff0c;类型为元组。 def test(name, *args,…

植物源UDP-糖基转移酶及其分子改造-文献精读75

植物源UDP-糖基转移酶及其分子改造 摘要 糖基化能够增加化合物的结构多样性,有效改善水溶性、药理活性和生物利用度,对植物天然产物的药物开发至关重要。UDP-糖基转移酶(UGTs)能够催化糖基从活化的核苷酸糖供体转移到受体形成糖苷键,植物中天然产物的糖基化修饰主要通过UGTs实…

计算机网络-常用网络命令和工具

目录 Ping命令 正常的执行结果 常见的失败反馈信息 语法格式 常用参数 Ipconfig命令简介 语法格式 命令参数 tracert 命令简介 工作原理 语法格式 常用参数 nbtstat命令简介 语法格式 常用参数 netstat 命令简介 语法格式 常用参数 Ping命令 ping( Packet Internet Grope…

[MySQL#7] CRUD(2) | 更新 | 删除 | 聚合函数 | group by

目录 3. 更新 4. 删除 截断表 日志的作用 5. (实验) 插入查询结果 6. 聚合函数 7. 分组查询 接着上篇文章[MySQL#6] 表的CRUD (1) | Create | Retrieve(查) | where继续讲解~ 3. 更新 语法&#xff1a; UPDATE table_name SET column expr [, column expr ...][WHE…

RegCM模式运行./bin/regcmMPI报错

1、报错 在运行RegCM时到截止模拟时间段时&#xff0c;不显示successfully&#xff0c;而是报错&#xff1a; MPI_ABORT was invoked on rank 0 in communicator MPI COMMUNICATOR 3 DUP FROM 0 with errorcode 1. NOTE: invoking MPI_ABORT causes Open MPI to kill all MP…

日本也有九九乘法表?你会读吗?柯桥零基础学日语到蓝天广场

日本也有“九九乘法表”&#xff1f; 九九乘法表起源于中国&#xff0c;可以追溯到春秋战国时代。 日本奈良县橿原市境内的“藤原京”遗址&#xff0c;出土了日本目前可找到最古老的“九九乘法表”木简。 根据日本奈良研究所的研究&#xff0c;其内容可能是1300多年前的官吏用…

Python(包和模块)

包 定义 包是将模块以文件夹的组织形式进行分组管理的方法&#xff0c;以便更好地组织和管理相关模块。 包是一个包含一个特殊的__init__.py文件的目录&#xff0c;这个文件可以为空&#xff0c;但必须存在&#xff0c;以标识目录为Python包。 包可以包含子包&#xff08;子…