【JAVA】Java基础—面向对象编程:类的定义

编者:之前对JAVA的基础语法,面向对象编程基础进行了介绍,但这方面内容是面向对象的核心,理解OOP概念需要一定时间,所以,我们对这块内容细化进行子主题介绍。

一、类的基本概念

在Java中,类的定义包括以下几个部分:

  1. 类的声明:使用class关键字定义一个类。

  2. 属性(字段):类的状态或特征,通常用变量表示。

  3. 方法:类的行为或功能,通常用函数表示。

  4. 构造函数:用于创建对象的特殊方法。

二、类的定义示例

示例 1:简单的类定义

代码示例

// 定义一个简单的类 Car
public class Car {// 属性(字段)String color; // 颜色String model; // 型号int year; // 年份// 构造函数public Car(String color, String model, int year) {this.color = color; // 使用参数初始化属性this.model = model;this.year = year;}// 方法:显示汽车信息public void displayInfo() {System.out.println("Car Model: " + model);System.out.println("Car Color: " + color);System.out.println("Car Year: " + year);}
}// 主类,用于测试 Car 类
public class Main {public static void main(String[] args) {// 创建 Car 类的对象Car myCar = new Car("Red", "Toyota", 2020);// 调用方法显示汽车信息myCar.displayInfo();}
}

代码解释

  1. 类的声明public class Car定义了一个名为Car的类。

  2. 属性String colorString modelint yearCar类的属性,分别表示汽车的颜色、型号和年份。

  3. 构造函数public Car(String color, String model, int year)是构造函数,用于初始化新创建的对象的属性。this关键字用于区分类的属性和构造函数的参数。

  4. 方法public void displayInfo()是一个方法,用于输出汽车的信息。

  5. 对象创建:在Main类的main方法中,使用new Car("Red", "Toyota", 2020)创建了一个Car对象,并调用displayInfo方法显示汽车信息。

三、类的进一步扩展

在实际应用中,类可以更加复杂,包含更多的功能和特性。下面我们将介绍一些常见的扩展特性。

1. 方法重载

方法重载是指在同一个类中,可以定义多个同名但参数不同的方法。

示例 2:方法重载

public class Calculator {// 加法:两个整数public int add(int a, int b) {return a + b;}// 加法:三个整数public int add(int a, int b, int c) {return a + b + c;}// 加法:两个浮点数public double add(double a, double b) {return a + b;}
}// 主类,用于测试 Calculator 类
public class Main {public static void main(String[] args) {Calculator calc = new Calculator();// 调用不同的 add 方法System.out.println("Add two integers: " + calc.add(5, 10));System.out.println("Add three integers: " + calc.add(5, 10, 15));System.out.println("Add two doubles: " + calc.add(5.5, 10.5));}
}

代码解释

  1. Calculator类中定义了三个add方法,分别处理不同数量和类型的参数。

  2. Main类中,创建Calculator对象并调用不同的add方法,展示了方法重载的使用。

2. 继承

继承是OOP的重要特性,允许一个类继承另一个类的属性和方法,从而实现代码重用。

示例 3:继承

// 基类
public class Vehicle {String brand; // 品牌public Vehicle(String brand) {this.brand = brand;}public void honk() {System.out.println("Beep! Beep!");}
}// 派生类
public class Bike extends Vehicle {int gears; // 齿轮数public Bike(String brand, int gears) {super(brand); // 调用基类构造函数this.gears = gears;}public void displayInfo() {System.out.println("Bike Brand: " + brand);System.out.println("Number of Gears: " + gears);}
}// 主类,用于测试 Bike 类
public class Main {public static void main(String[] args) {Bike myBike = new Bike("Giant", 21);// 调用方法myBike.honk(); // 继承的方法myBike.displayInfo(); // 自己的方法}
}

代码解释

  1. Vehicle类是基类,包含品牌和喇叭的方法。

  2. Bike类继承自Vehicle类,增加了gears属性和displayInfo方法。

  3. Main类中,创建Bike对象,调用继承自Vehiclehonk方法和Bike类自己的displayInfo方法。

3. 封装

封装是OOP的另一个重要特性,通过访问修饰符控制对类属性和方法的访问。

示例 4:封装

public class Account {// 私有属性private String accountNumber;private double balance;// 构造函数public Account(String accountNumber) {this.accountNumber = accountNumber;this.balance = 0.0; // 初始余额为0}// 公共方法:存款public void deposit(double amount) {if (amount > 0) {balance += amount;System.out.println("Deposited: " + amount);} else {System.out.println("Deposit amount must be positive.");}}// 公共方法:取款public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;System.out.println("Withdrew: " + amount);} else {System.out.println("Insufficient funds or invalid amount.");}}// 公共方法:查看余额public double getBalance() {return balance;}
}// 主类,用于测试 Account 类
public class Main {public static void main(String[] args) {Account myAccount = new Account("123456789");myAccount.deposit(1000);System.out.println("Current Balance: " + myAccount.getBalance());myAccount.withdraw(500);System.out.println("Current Balance: " + myAccount.getBalance());myAccount.withdraw(600); // 尝试取款超过余额}
}

代码解释

  1. Account类的属性accountNumberbalance被声明为私有,外部无法直接访问。

  2. 提供公共方法depositwithdrawgetBalance来操作账户余额,确保了数据的安全性。

  3. Main类中,创建Account对象并调用公共方法,展示了封装的效果。

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

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

相关文章

IPTABLE:Linux下的网络防火墙

IPTABLE&#xff1a;Linux下的网络防火墙 引言 在Linux系统中&#xff0c;IPtable是一种强大的网络防火墙工具&#xff0c;广泛应用于各种网络环境中。它不仅可以实现基本的包过滤功能&#xff0c;还能进行网络地址转换&#xff08;NAT&#xff09;、数据包记录、流量统计等高…

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

友思特应用 | 动态捕捉:高光谱相机用于移动产线上的食品检测

导读 高光谱成像技术能够为食品安全助力。以友思特BlackIndustry SWIR 1.7 Max 为代表的高光谱相机&#xff0c;完美解决了移动产线检测的应用难点。 高光谱技术&#xff1a;为食品安全保驾护航 食品安全一直是大众关心的热点话题&#xff0c;提供安全、高质量的食品需要对食…

Java——》try-with-resource

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

【极客兔兔-Web框架Gee详解】Day0 序言

文章目录 一、Web 开发1. 什么是Web 开发&#xff1f;2. 主要组成部分2.1 前端开发2.2 后端开发2.3 全栈开发2.4 数据库管理 3. Web开发过程3.1 规划和设计&#xff1a;3.2 开发和编码&#xff1a;3.3 测试和优化&#xff1a;3.4 部署和维护&#xff1a; 4. 总结 二、用标准库n…

点击文本将内容填入tinymce-vue 富文本编辑器的光标处

富文本编辑器组件 <template><div ref"tinymceBox" class"tinymce-box"><Editor id"myEditor" v-model"contentValue" :init"init" :disabled"disabled" blur"inputBlur" click"o…

3.2cpu

这个转换原理是基于&#xff0c;地址号*大小页内偏移量&#xff0c;通过页表使逻辑号和内存号之间建立起联系&#xff0c;从而实现地址的转换 按字节寻址&#xff0c;意思是说一个地址的大小是一个字节 页表记录的是逻辑块号与实际存储的主存块号之间的映射关系&#xff0c;是…

SQLI LABS | Less-35 GET-Bypass Add Slashes (we dont need them) Integer Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-35/ 话不多说…

小北的字节跳动青训营与LangChain实战课:深入探索输出解析器与Pydantic解析器重构(持续更新中~~~)

前言 最近&#xff0c;字节跳动的青训营再次扬帆起航&#xff0c;作为第二次参与其中的小北&#xff0c;深感荣幸能借此机会为那些尚未了解青训营的友友们带来一些详细介绍。青训营不仅是一个技术学习与成长的摇篮&#xff0c;更是一个连接未来与梦想的桥梁~ 小北的青训营 X M…

Leetcode 两数之和 Ⅱ - 输入有序数组

这段代码实现了在一个非递减排序的数组中找到两个数&#xff0c;使它们的和等于目标值的算法。算法使用了双指针技术&#xff0c;具体思想如下&#xff1a; 算法思想&#xff1a; 初始化指针&#xff1a;定义两个指针 left 和 right&#xff0c;分别指向数组的起始位置和末尾位…

UE5.4 PCG 复制关卡实例

关卡实例&#xff1a;最大层级的管理&#xff0c;方便关卡级别的复制、重载 1.创建关卡实例&#xff0c;右箭生成PCG设置。注意&#xff1a;当关卡实例发生变化&#xff0c;需要重新手动再创建一次PCG设置 2.直接拖放到PCG图&#xff0c;设置如下 说明&#xff1a;PCG设置文…

C++ | Leetcode C++题解之第551题学生出勤记录I

题目&#xff1a; 题解&#xff1a; class Solution { public:bool checkRecord(string s) {int absents 0, lates 0;for (auto &ch : s) {if (ch A) {absents;if (absents > 2) {return false;}}if (ch L) {lates;if (lates > 3) {return false;}} else {lates…

Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)

目录 安装所需库 Python获取PDF页数 Python获取PDF页面尺寸 Python获取PDF页面旋转角度 Python获取PDF页面方向 Python获取PDF页面标签 Python获取PDF页面边框信息 了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面&#xff0c;每个页…

设计模式(主要的五种)

1.设计模式&#xff1a; 设计模式就是代码设计经验 2.设计模式的类型&#xff1a; 分为三大类&#xff1a;创建型模式&#xff0c;结构型模式&#xff0c;行为模式 创建型模式&#xff1a; 单例模式&#xff1a;某个类只能有一个实例&#xff0c;提供一个全局的访问点。 工…

【北京迅为】itop-3588开发板摄像头使用手册Android12 双摄方案

本章节对应资料在网盘资料“iTOP-3588 开发板\02_【iTOP-RK3588 开发板】开发资料 \07_Android 系统开发配套资料\08_Android12 摄像头使用配套资料”目录下下载。 2.1 Android12 前摄后摄 网盘中默认的 Android12 源码支持四个摄像头单独打开&#xff0c;本小节我们来修改源码…

Javascript如何实现继承?

#一、是什么 继承&#xff08;inheritance&#xff09;是面向对象软件技术当中的一个概念。 如果一个类别B“继承自”另一个类别A&#xff0c;就把这个B称为“A的子类”&#xff0c;而把A称为“B的父类别”也可以称“A是B的超类” 继承的优点 继承可以使得子类具有父类别的…

测度论原创(三)

Morden Prob 文章目录 Morden ProbWeek3多维扩展和随机向量定理3.1推论&#xff1a;random variable的变换定理3.2 连续函数的可测性定理3.3 可测函数的线性组合关于拓展实数集的延伸定理3.4 可测函数的极限依旧为可测性随机变量的概率律&#xff08;Law of X X X&#xff09;…

Sql面试题二:请查询出用户连续三天登录的所有数据记录

问题&#xff1a; 现有用户登录记录表&#xff0c;请查询出用户连续三天登录的所有数据记录 id dt 1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 2…

vite中env uat/dev文件项目配置

1&#xff1a;图示 在vscode中显示的是&#xff08;在文件中显示不是文件夹而在vscode中显示是文件夹-- .env 而这个.env也是有内容的&#xff09; 2&#xff1a;.env文件内容 # 标题 VITE_APP_TITLE管理系统# 项目本地运行端口号 VITE_PORT80# open 运行 npm run dev 时自动打…

ssm基于JAVA的网上订餐管理系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容…