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通过对前端设备传回的码流进行解码以及图像质量评估,对视频图像中存在的质量问题进行智能分析、判断和预警。这项技术在安防监控领域尤为重要,因为它能够确保监…

Python Pycharm下载

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

比较24个结构的迭代次数

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

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

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

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

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

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

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

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

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

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

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

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

1、报错 在运行RegCM时到截止模拟时间段时,不显示successfully,而是报错: 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…

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

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

Python(包和模块)

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

集群聊天服务器——逻辑梳理

网络聊天服务器项目,该项目分为4个模块: 首先是网络模块:我使用了muduo高性能网络库,解耦合网络与业务之间这两部分代码,可以更加专注与业务的功能开发其次是服务层模块:我使用了基于C11的技术比如绑定器和…

前沿技术与未来发展第一节:C++与机器学习

第六章:前沿技术与未来发展 第一节:C与机器学习 1. C在机器学习中的应用场景 C在机器学习中的应用优势主要体现在高效的内存管理、强大的计算能力和接近底层硬件的灵活性等方面。以下是 C 在机器学习领域的几个主要应用场景: 1.1 深度学习…

项目解决方案:在弱网(低带宽、高延迟、有丢包的网络)环境下建设视频监控平台的设计方案(下)

目录 一、需求分析 1、业务需求分析 2、功能需求分析 二、建设目标 三、设计原则 四、标准规范建设 五、系统架构 1、视频接入管理系统 2、资源管理调度平台 3、视频转码解码服务器 4、媒体输出引擎 5、媒体录制引擎 6、智能联动引擎 7、API开发引擎 六、部署架构 七、产…

操作系统笔记(四)进程间通信,竞争条件与解决方案

进程间通信(IPC) 如何在进程间传递信息? 如何防止两个进程冲突? 如何实现进程执行的先后顺序? 竞争条件(Race conditions) 竞争条件(Race conditions) 多个进程访问一个共享数据,而数据最…

jmeter的基本使用

Jmeter基本使用 一、变量 1.用户定义变量 2.用户参数 二、函数 1.计数器${__counter(,)} 2.时间函数 3.加密函数${__digest(,,,,)} 4. 整数相加${__intSum(,,)} 5.属性函数,${__P(,)}、${__property(,,)}、${__setProperty(,,)} 6.V函数 三、获取响应数据…

Go语言基础教程:指针

在 Go 中,函数参数默认是按值传递的。若要改变变量的原始值,可以使用指针。本教程将通过示例代码来演示如何使用值传递和指针传递。 package mainimport "fmt"// 传值方式 - 函数内改变 ival 的值不会影响原始变量 func zeroval(ival int) {i…

2024年优秀的天气预测API

准确、可操作的天气预报对于许多组织的成功至关重要。 事实上,在整个行业中,天气条件会直接影响日常运营,包括航运、按需、能源和供应链(仅举几例)。 以公用事业为例。根据麦肯锡的数据,在 1.4 年的时间里…

HCIP-HarmonyOS Application Developer V1.0 笔记(二)

类Web开发范式自定义组件基本用法 自定义组件通过element引入到宿主页面。 Props自定义属性 自定义属性支持类型 String,Number,Boolean,Array,Object。 命名规范: 命名时禁止以on、、on:、grab:等保留关键字为开头…

天润融通突破AI客服局限,三大关键提升文本机器人问答效果

近期,AI客服再次登上热搜,引发网友集体吐槽,比如AI客服虽然态度客气,但听不懂客户诉求,回答问题驴唇不对马嘴,解决不了问题...... 更有网友将这些问题升级到,企业就是不想解决问题才交给AI客服…