java面向对象知识补充

news/2025/11/21 22:23:48/文章来源:https://www.cnblogs.com/yuyuyu313/p/19254685
  • static静态变量补充知识:

    1. static静态变量:数据只需要一份,且需要被共享时(访问,修改)例如,记录全局某个数量。
    2. 实例变量:每个对象都要有一份,数据各不同。(普通定义)
  • 静态方法

    1. 静态方法可以用来设计工具类。

    2. 工具类中的方法都是静态方法,每个类都是用来完成一个功能的。

    3. 静态方法可以直接用类来调用,避免用对象调用,浪费内存。

    4. 工具类定义时,建议把构造器私有化(private),这样就不能构建对象了。

    5. 静态方法可以直接访问静态属性,静态方法中不能出现this关键字。

面向对象小案例

  • 电影类
package 面向对象小案例;public class Movie {private int id;private String name;private double price;private String actor;public Movie() {}public Movie(int id, String name, double price, String actor) {this.id = id;this.name = name;this.price = price;this.actor = actor;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}
}
  • 电影业务逻辑类
package 面向对象小案例;import java.util.Scanner;public class movieOperator {private Movie[] movie;//定义一个电影数组等会用于接收我们上面定义的电影信息public movieOperator(Movie[] movie) {//利用构造方法将我的main方法中的电影数组的电影信息存入业务逻辑类的电影数组中this.movie = movie;}//打印电影信息public void printMovies() {for (Movie m : movie) {System.out.println(m.getId() + "\t" + m.getName() + "\t" + m.getPrice() + "\t" + m.getActor() + "\t");}}//根据电影ID查找电影信息public void searchMovie() {Scanner sc = new Scanner(System.in);System.out.println("请输入你要查找的电影ID:");int n = sc.nextInt();for (Movie m : movie) {if (m.getId() == n) {//如果查找的电影ID等于遍历到的电影数组里的ID,就打印这个电影的所有信息System.out.println(m.getId() + "\t" + m.getName() + "\t" + m.getPrice() + "\t" + m.getActor());return;}}System.out.println("没有你要查找的电影");}
}
  • 主类
package 面向对象小案例;public class test1 {public static void main(String[] args) {Movie[] movies = new Movie[5];//创建一个电影数组//存入所有的电影数据movies[0] = new Movie(1, "qq", 10, "qq");movies[1] = new Movie(2, "ww", 3, "ww");movies[2] = new Movie(3, "ee", 40, "ee");movies[3] = new Movie(4, "rr", 5, "rr");movies[4] = new Movie(5, "tt", 30, "tt");//构建业务逻辑对象movieOperator mo = new movieOperator(movies);mo.printMovies();//调用打印电影信息的方法mo.searchMovie();//调用根据电影ID查找电影信息的方法}
}//结果为
/*
1	qq	10.0	qq	
2	ww	3.0	ww	
3	ee	40.0	ee	
4	rr	5.0	rr	
5	tt	30.0	tt	
请输入你要查找的电影ID:
3
3	ee	40.0	ee进程已结束,退出代码为 0
*/

四种修饰符的权限范围

  • private

    ( private void xx ( ){ } )

    1. 只能本类调用访问
  • 缺省

    ( void xx ( ){ } )

    1. 只能当前类中,同一个包的其他类中调用访问
  • protected

    (protected void xx ( ){ })

    1. 只能当前类中,同一个包的其他类中,子孙类中访问
  • public

    1. 任何类中都能访问

  • 子类的全部构造器,都会先调用父类构造器,再执行自己

  • 用this调用兄弟构造器

  • super()和this()必须写在构造器的第一行,并且两者不能同时出现

  • 多态

    1. 前提是:类之间有继承关系,存在父类引用子类对象,存在方法重写

    2. 编译看左,运行看右。

    3. 右边对象是解耦的,更便于拓展和维护

    4. 多态下不能使用子类的独有功能(因为编译看左,父类中没有子类独有的方法)

      ​ 解决方法:强制转换

      ​ 父类 a = new 子类();

      ​ 子类 b = new (子类) a ;

      ​ b.子类方法();

支付模块小案例

image-20251121194440911

  • Card类
package 支付模块小案例;public class Card {private String carId;private String name;private String phone;private double money;public Card(String carId, String name, String phone, double money) {this.carId = carId;this.name = name;this.phone = phone;this.money = money;}public Card() {}public String getCarId() {return carId;}public void setCarId(String carId) {this.carId = carId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}@Overridepublic String toString() {return "Card{" +"carId='" + carId + '\'' +", name='" + name + '\'' +", phone='" + phone + '\'' +", money=" + money +'}';}//预存金额public void deposit(double money) {this.money+=money;}//消费金额public void consume(double money) {this.money-=money;}
}
  • Gold Card类
package 支付模块小案例;public class GoldCard extends Card {public GoldCard(String carId, String name, String phone, double money) {super(carId, name, phone, money);}public GoldCard() {}public void consume(double money){System.out.println("您的金卡当前消费为:"+money);System.out.println("打折后消费:"+money*0.8);if(this.getMoney()<money*0.8){System.out.println("您的余额为:"+this.getMoney()+"无法支付该金额");return;}//更新消费后,剩下的余额this.setMoney(this.getMoney()-money*0.8);if(money>=200){System.out.println("您的消费满200,送您一张免费洗车票");}}
}
  • Silver Card类
package 支付模块小案例;public class SilverCard extends Card{public SilverCard(String carId, String name, String phone, double money) {super(carId, name, phone, money);}public SilverCard() {}@Overridepublic void consume(double money){System.out.println("您的银卡当前消费为:"+money);System.out.println("打折后消费:"+money*0.9);if(this.getMoney()<money*0.9){System.out.println("您的余额为:"+this.getMoney()+"无法支付该金额");return;}//更新消费后,剩下的余额this.setMoney(this.getMoney()-money*0.9);}
}
  • 主类
package 支付模块小案例;import java.util.Scanner;public class Demo {public static void main(String[] args) {Card card1=new GoldCard("111","张三","123123",6000);pay(card1);Card card2=new SilverCard("222","李四","456456",2500);pay(card2);}//设置一个刷卡机方法public static void pay(Card card){System.out.println("请刷卡,请输入你当前消费的金额:");Scanner sc=new Scanner(System.in);double money=sc.nextDouble();card.consume(money);}
}/*
结果为:请刷卡,请输入你当前消费的金额:3000您当前消费为:3000.0打折后消费:2400.0您的消费满200,送您一张免费洗车票请刷卡,请输入你当前消费的金额:3000您当前消费为:3000.0打折后消费:2700.0您的余额为:2500.0无法支付该金额
*/

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

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

相关文章

团队作业 3 - 教学课件和班级管理系统 需求改进 系统设计 - WAR

一、需求 & 原型改进(20 分)课堂讨论问题及修改(5 分)问题 1 修改 1课件格式支持单一(仅支持 PPT/PDF) 增加视频(MP4)、音频(MP3)格式课件上传与在线预览支持成绩统计维度单一(仅平均分) 新增最高分、…

win11下载安装python,命令提示符输入python,打开Microsoft store界面,解决方案

win11下载安装python,命令提示符输入python,打开Microsoft store界面,解决方案1.找到python安装路径, C:\Users\33723\AppData\Local\Programs\Python\Python314 C:\Users\33723\AppData\Local\Programs\Python\Py…

卷积神经网络的引入3 —— MLP 与 CNN 在更大数据集上的性能对比实验

卷积神经网络的引入3 —— MLP 与 CNN 在更大数据集上的性能对比实验 在前两篇文章中,我们分别验证了:MLP 对平移等扰动非常敏感,而 CNN 具备更好的鲁棒性 在 Fashion-MNIST(低维灰度图)下,MLP 与 CNN 的表现差距…

全网都在找的Nano Banana Pro API 来了!便宜稳定0.15/张

Nano Banana Pro(Gemini 3 Pro Image)是Google基于Gemini 3 Pro开发的新一代图像生成与编辑模型,它不仅在图像质量上达到了新的高度,更在文字渲染、多图像融合和实时信息整合方面带来了突破性的进展。本文将带你全…

通过DataReader获取sql查询的字段元数据信息

原理 应用程序调用 GetSchemaTable()↓ ADO.NET 驱动程序生成元数据查询SQL↓ 发送到数据库服务器执行↓ 数据库返回结果集架构信息(不包含实际数据)↓ ADO.NET 解析架构信息并构建 DataTable↓ 返回包含完整列信息的…

Docker命令入门

Docker命令入门1. 使用容器运行 Nginx 应用 1.1 使用 docker run 命令运行 Nginx 应用 1.1.1 观察下载容器镜像过程查找本地容器镜像文件执行命令过程一:下载容器镜像 $ docker run -d nginx:latestUnable to find im…

2025.11.21 - A

今天形势与政策,听了一些国际形势,收获颇丰

2025年新版ADB工具箱下载+驱动+ADB指令集+fastboot刷机ROOT程序

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P7960 [NOIP2021] 报数__洛谷题解

P7960 [NOIP2021] 报数 题目描述 报数游戏是一个广为流传的休闲小游戏。参加游戏的每个人要按一定顺序轮流报数,但如果下一个报的数是 \(7\) 的倍数,或十进制表示中含有数字 \(7\),就必须跳过这个数,否则就输掉了游…

The 5W2H Problem-Solving Method

The 5W2H Problem-Solving Method https://www.msicertified.com/wp-content/uploads/2024/02/The-5W2H-Problem-Solving-Method.pdf 出处:http://www.cnblogs.com/lightsong/本文版权归作者和博客园共有,欢迎转载,但…

题解:SP5830 ALTPERM - Alternating Permutations

题意:给你 \(K\) 个下标,保证 \(A_1=1,A_K=N\),且对任意的 \(i<N\) 有 \(A_i<A_{i+1}\)。 如果一个排列,在下标 \(A_1\) 到 \(A_2\) 处单调递增,在下标 \(A_2\) 到 \(A_3\) 处单调递减,在下标 \(A_3\) 到 …

图床创建:github+Picgo+obsidian 带有同步删除的自动上传

最近一直在做DL部分的学习笔记,一个比较麻烦的地方就是我一直用的obsidian做笔记内容,在博客园导入随笔后,图片的链接一直是我的本地路径,自然无法显示,于是我只好在导入随笔后再把图片一张张上传到博客园的图床上…

重组生长因子全面解析:从结构功能到科研应用指南

重组生长因子是现代生命科学研究中不可或缺的重要工具,它们通过基因工程技术在体外表达和纯化获得,为细胞生物学、发育生物学及信号转导研究提供了高纯度、高活性的关键试剂。作为科研试剂,重组生长因子以其精确的序…

2055.11.21

十点睡醒起床,吃饭 然后洗澡回宿舍上网课,开团会,出去吃饭,回宿舍准备睡觉

Dify异步接口调用优化实践:解决长时任务处理与网络超时疑问

Dify异步接口调用优化实践:解决长时任务处理与网络超时疑问pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

STM32系统时钟与SysTick定时器

一、系统嘀嗒定时器(SysTick)全面解析 1. SysTick定时器基本概念 定时器是STM32 中常用的外设,一般定时器的基本功能就是定时,而在Cortex M3/M4 内核中也包含一个简单的定时器,就是系统嘀嗒定时器(Systick),它是属…

【251121】CF2171 Div.3 vp 总结

老师说让我尝试体验快乐 AK,但是我失败了。 还是太菜了喵! 题目梗概题目编号 题目名称 题目链接A Shizuku Hoshikawa and Farm Legs LinkB Yuu Koito and Minimum Absolute Sum LinkC1 / C2 Renako Amaori and XOR G…

OI 笑传 #32

なんてったって春今天是 bct Day2,赛时 \(40+60+10+0=110\),rk 70。 挂分原因是被 vector 卡常了/fn。然后 T4 捆绑 Sbt#1 T 了一个于是又没了 20pts。 评价是 ok 场,练习了对拍的使用。 发现 hm2ns 总是会随口否掉…

PyOpenGL实现Bresenham算法

Bresenham直线算法 Bresenham画圆算法 中点Bresenham画椭圆算法1. Bresenham直线生成算法 1.1 理论基础 绘制直线的最直观想法是使用直线方程 y = mx + b,并对x的每个整数值计算y 这涉及到大量的浮点数乘法和舍入运算…