Java从入门到精通-类和对象(一)

0. 类和对象

1. 面向对象概述

Java面向对象编程(Object-Oriented Programming,OOP)是一种强大的编程范式,它基于对象、类、封装、继承和多态等核心概念。这种编程范式使得代码更加模块化、可维护、可重用和可扩展。

1.1 对象和类

在Java中,一切都是对象。对象是程序中的基本单位,它代表现实世界中的实体或概念。例如,我们可以考虑一个简单的汽车对象:

class Car {String color;int speed;void start() {System.out.println("汽车启动了!");}void accelerate() {System.out.println("汽车加速中...");}
}

在示例中,我们定义了一个名为Car的类,它具有颜色(color)和速度(speed)这两个属性,以及两个方法(start()accelerate())。这个类描述了汽车的特征和行为。

1.2 封装

封装是OOP的一个关键概念,它指的是将数据和方法封装在类内部,以保护数据的安全性。只有类的方法可以访问和修改类的数据,外部代码无法直接访问或修改数据。这提高了代码的可维护性和安全性。让我们看一个封装的示例:

class BankAccount {private double balance;public void deposit(double amount) {if (amount > 0) {balance += amount;}}public double getBalance() {return balance;}
}

在示例中,balance属性被声明为private,这意味着只有BankAccount类的方法才能访问它。外部代码必须通过公共方法(deposit()getBalance())来操作和获取账户余额。

1.3 继承

继承是OOP的另一个关键概念,它允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法。子类可以重用父类的代码,并且可以添加自己的特定属性和方法。这有助于代码重用和建立层次化结构。示例如下:

class Animal {void eat() {System.out.println("动物吃东西");}
}class Dog extends Animal {void bark() {System.out.println("狗在叫");}
}

在示例中,Animal类定义了eat()方法,而Dog类继承了Animal类,并添加了自己的bark()方法。这使得Dog类既可以调用eat()方法,也可以调用bark()方法。

1.4 多态

多态是OOP的另一个强大概念,它允许不同类的对象对相同的消息(方法调用)作出不同响应。多态允许对象根据其实际类型执行不同的行为。示例如下:

class Shape {void draw() {System.out.println("绘制形状");}
}class Circle extends Shape {@Overridevoid draw() {System.out.println("绘制圆形");}
}class Square extends Shape {@Overridevoid draw() {System.out.println("绘制正方形");}
}

在示例中,Shape类定义了draw()方法,而CircleSquare类都继承了Shape类并重写了draw()方法。这意味着可以创建ShapeCircleSquare对象,并调用它们的draw()方法,它们会根据实际类型执行不同的绘制行为。

2. 类

类是面向对象编程的基本构建块之一。类定义了对象的结构和行为。让我们深入了解类的概念,包括成员变量、成员方法、权限修饰符、局部变量、局部变量的有效范围、this关键字以及类的构造方法。

2.1 类的基本结构

一个类的基本结构通常包括以下部分:

public class ClassName {// 成员变量(属性)dataType variable1;dataType variable2;// 构造方法public ClassName(parameters) {// 构造方法的初始化代码}// 成员方法returnType methodName(parameters) {// 方法体}// 其他成员方法
}

1. 成员变量(属性):

  • 成员变量是类的属性,用于存储对象的状态信息。
  • 定义了类的特征或数据。

2. 构造方法:

  • 构造方法是一个特殊的方法,用于初始化对象的属性。
  • 在创建对象时自动调用,通常用于执行必要的初始化操作。
  • 构造方法的名称与类名相同。

3. 成员方法:

  • 成员方法定义了对象可以执行的操作。
  • 定义了类的行为或操作。

2.2 成员变量

成员变量是类的属性,它们用于存储对象的状态信息。在类中声明成员变量时,可以使用不同的权限修饰符,如privatepublicprotected等,以控制其可访问性。例如:

public class Student {// 成员变量public String name; // 公共成员变量private int age;    // 私有成员变量protected double gpa; // 受保护的成员变量
}

2.3 构造方法

构造方法是用于初始化对象的特殊方法。每个类可以有一个或多个构造方法,根据不同的参数列表进行重载。构造方法的名称必须与类名相同,它没有返回值。

public class Student {private String name;private int age;// 构造方法public Student(String name, int age) {this.name = name;this.age = age;}
}

在示例中,Student类有一个构造方法,接受姓名和年龄作为参数,用于初始化学生对象的属性。

2.4 成员方法

成员方法定义了对象可以执行的操作。它们用于定义类的行为或操作。成员方法的声明包括返回类型、方法名、参数列表和方法体。

public class Calculator {// 成员方法:加法public int add(int num1, int num2) {return num1 + num2;}// 成员方法:除法public double divide(double dividend, double divisor) {if (divisor != 0) {return dividend / divisor;} else {System.out.println("除数不能为零");return Double.NaN; // 返回NaN表示不是一个数字}}
}

在示例中,Calculator类定义了两个成员方法,add()divide(),分别用于执行加法和除法操作。

2.5 权限修饰符

Java提供了不同的权限修饰符,用于控制成员变量和成员方法的可访问性:

  • public:可以在任何地方访问。
  • private:只能在类内部访问。
  • protected:只能在同一包内或子类中访问。
  • 默认(无修饰符):只能在同一包内访问。

2.6 局部变量和有效范围

局部变量是在方法或代码块内部声明的临时变量。它们的作用域仅限于声明它们的代码块内部。例如:

public class Example {public void someMethod() {int x = 10; // 局部变量,只能在someMethod()方法内部访问}
}

2.7 this关键字

this关键字用于引用当前对象的引用。它可以用于区分成员变量和局部变量,特别是在成员方法中。例如:

public class Person {private String name;public void setName(String name) {// 使用this关键字来引用成员变量this.name = name;}
}

在示例中,使用this.name来引用成员变量,以区分成员变量和方法参数的name

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

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

相关文章

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行,\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…

比较Visual Studio Code中的文件

目录 一、比较两个文件 1.1VS code中的文件大致分为两类: 1.2如何比较VS code中的两个文件? 二、并排差异模式:VS code中的一种差异模式 三、内联差异模式:VS code中的另一种差异模式 四、VS code忽略在行首或者行尾添加或删除…

图像分割笔记(二): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程))

文章目录 一、图像分割介绍二、YOLOv5-Seg介绍三、代码获取四、视频讲解五、环境搭建六、数据集准备6.1 数据集转换6.2 数据集验证七、模型训练八、模型验证九、模型测试十、评价指标一、图像分割介绍 图像分割是指将一幅图像划分为若干个互不重叠的区域,每个区域内的像素具有…

关于安卓grovvy开发(一)bugly混淆自动上报

背景 打包,mapping,上传,这些是不是都困扰了开发很多。苦于复制粘贴?反正我是。于是,有了这个 最终效果 最终的效果,就是点击项目的打包gradle,复制mapping文件且进行bugly混淆的自动上报。 …

LeetCode141.环形链表

这个题非常简单,我一下子就想到了用HashSet,从前往后把节点放入hashset中,如果set中存在这个节点说明存在环,如果把链表遍历完了说明不存在环,直接返回false,以下时我的代码: public class Sol…

环境扫描/透射电子显微镜气体样品架的真空压力和微小流量控制解决方案

摘要:针对环境扫描/透射电子显微镜对样品杆中的真空压力气氛环境和流体流量精密控制控制要求,本文提出了更简单高效和准确的国产化解决方案。解决方案的关键是采用动态平衡法控制真空压力,真空压力控制范围为1E-03Pa~0.7MPa;采用压…

Pytest模式执行python脚本不生成allure测试报告

1.安装allure 下载allure的zip安装包 将allure.zip解压到python的lib目录中 将allure的bin路径添加到环境变量path中(注意:配置环境变量后,一定要重启电脑。因为环境变量没生效,我搞了半天在pycharm不能生成报告,在cmd中可以生成…

【Redis】.net core Redis事件订阅与发布,基础篇

2023年,第38周。给自己一个目标,然后坚持总会有收货,不信你试试! 发布与订阅(Publish/Subscribe,也简称为 Pub/Sub)是一种消息传递模式,用于解耦发布者和订阅者之间的关系。 目录 一…

华清远见第六课程day4作业

仿照string类&#xff0c;完成myString 类 #include <iostream> #include <cstring>using namespace std;class myString{ private:char *str;int size; public:myString():size(10){str new char[size];strcpy(str,"");}myString(const char*s){size …

【FPGA零基础学习之旅#12】三线制数码管驱动(74HC595)串行移位寄存器驱动

&#x1f389;欢迎来到FPGA专栏~三线制数码管驱动 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指…

Transformer(二)—— ResNet(残差网络)

Transformer&#xff08;二&#xff09;—— ResNet&#xff08;残差网络&#xff09; 一、背景1.1 梯度消失/爆炸1.2 网络退化(Degradation) 二、思路2.1 为什么需要更深的网络2.2 理想中的深网络表现 三、实践和实验效果3.1 构造恒等映射&#xff1a;残差学习&#xff08;res…

0016Java程序设计-springboot幼儿园管理系统

摘 要目 录系统设计开发环境 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于幼儿园管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了幼儿园管理系统&a…

【进阶篇】MySQL的MVCC实现机制详解

文章目录 0.前言1.基础介绍1.1. 什么是MVCC?1.1. 什么是当前读和快照读&#xff1f;1.1. 当前读&#xff0c;快照读和MVCC的关系1.1. MVCC能解决什么问题&#xff0c;好处是&#xff1f;1.1.1. 提高并发性能1.1.2. 避免死锁1.1.3. 解决脏读、不可重复读和幻读等问题1.1.4. 实现…

【unity3D】如何修改相机的默认视角

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的如何修改相机的默认视角 如何修改相机的默认视角 Game窗口运行的话视角是这样的&#xff1a; 此时Scene窗口的视角是这样的&…

游戏发行平台都有什么服务和功能?

游戏发行平台通常提供一系列服务和功能&#xff0c;以帮助游戏开发商将游戏推向市场&#xff0c;并为玩家提供游戏。以下是一些常见的游戏发行平台服务和功能&#xff1a; 1、游戏发布 发行平台允许游戏开发商将游戏上传到平台上&#xff0c;以供玩家下载和安装。 2、游戏销售…

qt作业day4

//clock_exercise.cpp#include "clock_timer.h" #include "ui_clock_timer.h"//时间事件处理函数 void Clock_Timer::timerEvent(QTimerEvent *event) {if(event->timerId() time_id){sys_tm QDateTime :: currentDateTime(); // int year sy…

远程恋爱网站部署秘籍——群晖虚拟机助ni秀恩爱

文章目录 前言1. 安装网页运行环境1.1 安装php1.2 安装webstation 2. 下载网页源码文件2.1 访问网站地址并下载压缩包2.2 解压并上传至群辉NAS 3. 配置webstation3.1 配置网页服务3.2 配置网络门户 4. 局域网访问静态网页配置成功5. 使用cpolar发布静态网页&#xff0c;实现公网…

习题练习 C语言(暑期第四弹)

自我小提升&#xff01; 前言一、数组二、指针运算三、统计每个月兔子的总数四、双指针的应用五、判断指针六、珠玑妙算七、两数之和八、数组下标九、指针十、寻找峰值十一、二级指针十二、大端小端十三、无符号参数十四、数对十五、截取字符串总结 前言 重要的事说三遍&#…

分布式系统常用的模式

分布式系统常用的模式 Ambassador 名称&#xff1a;“大使”模式 介绍&#xff1a;作为应用程序和其他服务的“中间人”&#xff0c;负责应用程序和其他服务之间的通信&#xff0c;包括日志、监控或重试处理等任务。 举例&#xff1a;K8S使用Envoy作为一个“大使”来简化服务…

Docker 搭建Redis 集群之路

前言 搞技术就是动手,动手再动手,实践出真知,毕竟最终是要解决问题的呢,废话不多讲,开搞,主要是为了记录一下,毕竟过程还是有点艰辛呢需求(target) Windows 电脑 装一个虚拟机用虚拟机构造Linux 系统下载Docker 搭建Redis 集群代码交互集群过关斩将 检查电脑是否开启…