JavaSE——面向对象练习题

1.对象数组排序

        定义一个Person类{name,age,job},初始化Person对象数组,有3个person对象,并按照age从小到大进行冒泡排序;再按照name的长度从小到大进行选择排序。

public class HomeWork01 {public static void main(String[] args) {Person[] persons = new Person[4];persons[0] = new Person("zhangsan", 18, "java工程师");persons[1] = new Person("lisi", 32, "项目经理");persons[2] = new Person("wangwu", 10, "小学生");persons[3] = new Person("tom", 50, "BOSS");System.out.println("原始数组:" + Arrays.toString(persons));for (int i = 0; i < persons.length - 1; i++) {for (int j = 0; j < persons.length - 1 - i; j++) {if (persons[j].getAge() > persons[j + 1].getAge()) {Person temp = persons[j];persons[j] = persons[j + 1];persons[j + 1] = temp;}}}System.out.println("按照年龄[从小到大]进行冒泡排序:" + Arrays.toString(persons));for (int i = 0; i < persons.length - 1; i++) {for (int j = i + 1; j < persons.length; j++) {if (persons[i].getName().length() > persons[j].getName().length()) {Person temp1 = persons[i];persons[i] = persons[j];persons[j] = temp1;}}}System.out.println("按照姓名长度[从小到大]进行选择排序:" +Arrays.toString(persons));}
}class Person {private String name;private int age;private String job;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public Person(String name, int age, String job) {this.name = name;this.age = age;this.job = job;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", job='" + job + '\'' +'}';}
}

运行结果:

2.super与this区别 

3.判断输出结果(super与this区分)

public class Homework07 {public static void main(String[] args) {}
}class Test { //父类String name = "Rose";Test() {System.out.println("Test");//(1)}Test(String name) {//name johnthis.name = name;//这里把父类的 name 修改 john}
}class Demo extends Test {//子类String name = "Jack";Demo() {super();System.out.println("Demo");//(2)}Demo(String s) {super(s);}public void test() {System.out.println(super.name);//(3) Rose (5) johnSystem.out.println(this.name);//(4) Jack (6) Jack}public static void main(String[] args) {//1. new Demo()new Demo().test(); //匿名对象new Demo("john").test();//匿名}
}

运行结果:

4.模拟银行存取款业务

class BankAccount {private double balance; // 余额public BankAccount(double initialBalance) {this.balance = initialBalance;}// 存款public void deposit(double amount) {balance += amount;}// 取款public void withdraw(double amount) {balance -= amount;}
}

题目要求:

(1)在上面类的基础上扩展新类CheckingAccount,对每次存款和取款都收取1美元的手续费。

首先,我们对BankAccount类添加get与set方法:

class BankAccount {private double balance; // 余额public BankAccount(double initialBalance) {this.balance = initialBalance;}// 存款public void deposit(double amount) {balance += amount;}// 取款public void withdraw(double amount) {balance -= amount;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}
}

创建新类CheckingAccount:

class CheckingAccount extends BankAccount {public CheckingAccount(double initialBalance) {super(initialBalance);}/*** 存款收取1美元手续费,相当于少存1美元** @param amount*/@Overridepublic void deposit(double amount) {super.deposit(amount - 1);}/*** 取款收取1美元手续费,相当于再给银行1美元** @param amount*/@Overridepublic void withdraw(double amount) {super.withdraw(amount + 1);}
}

结果检验:

public class HomeWork08 {public static void main(String[] args) {CheckingAccount checkingAccount = new CheckingAccount(1000);checkingAccount.deposit(100);System.out.println(checkingAccount.getBalance()); // 1099.0checkingAccount.withdraw(20);System.out.println(checkingAccount.getBalance()); // 1078.0}
}

(2)扩展前一个练习的BankAccount类,新类SavingsAccount每个月都有利息产生(earnMonthlyInterest方法被调用),并且有每月三次免手续费的存款或取款。在earnMonthlyInterest方法中重置交易计数。

SavingsAccount类:

class SavingsAccount extends BankAccount {// 定义计费次数private int count = 3;// 定义银行利率private double rate = 0.01;public SavingsAccount(double initialBalance) {super(initialBalance);}/*** 每月重新计算利率*/public void earnMonthlyInterest() {// 重新初始化计费次数this.count = 3;// 每月重新计算计算余额super.deposit(getBalance() * rate);}/*** 重写存款方法,存款前查看存款是否超过3次** @param amount 存入的金额*/@Overridepublic void deposit(double amount) {if (count > 0) {super.deposit(amount);} else {super.deposit(amount - 1);}count--;}/*** 重写取款方法,取款前查看取款是否超过3次** @param amount 取款的金额*/@Overridepublic void withdraw(double amount) {if (count > 0) {super.withdraw(amount);} else {super.withdraw(amount + 1);}count--;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public double getRate() {return rate;}public void setRate(double rate) {this.rate = rate;}
}

结果检验: 

public class HomeWork08 {public static void main(String[] args) {   SavingsAccount savingsAccount = new SavingsAccount(1000);savingsAccount.deposit(100);savingsAccount.deposit(100);savingsAccount.deposit(100);System.out.println(savingsAccount.getBalance()); // 1300.0savingsAccount.withdraw(10); // 第4次存取,需要征收手续费System.out.println(savingsAccount.getBalance()); // 1289.0// 月初初始化计费次数savingsAccount.earnMonthlyInterest();System.out.println(savingsAccount.getBalance()); // 1301.89savingsAccount.deposit(100);System.out.println(savingsAccount.getBalance()); // 1401.89savingsAccount.withdraw(50);savingsAccount.withdraw(50);savingsAccount.withdraw(50); // 征收手续费System.out.println(savingsAccount.getBalance()); // 1250.89}
}

5.重写equals方法判断两个对象是否相等

        编写Doctor类{name,age,job,gender,sal}相应的getter()和setter()方法,5个参数的构造器,重写父类(Object)的equals()方法:public boolean equals(Object obj),并判断测试类中创建的两个对象是否相等。相等就是判断属性是否相同。 

public class HomeWork10 {public static void main(String[] args) {Doctor doctor = new Doctor("张三", 32, "主治医师", '男', 25000);Doctor doctor2 = new Doctor("张三", 32, "主治医师", '男', 25000);System.out.println(doctor.equals(doctor2)); // true}
}class Doctor {private String name;private int age;private String job;private char gender;private double sal;@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}// 判断obj 是否是 Doctor类型或其子类if (!(obj instanceof Doctor)) {return false;}// 向下转型, 因为obj的运行类型是Doctor或者其子类型Doctor doctor = (Doctor) obj;return this.name.equals(doctor.getName()) &&this.age == doctor.getAge() &&this.job.equals(doctor.getJob()) &&this.gender == doctor.getGender() &&this.sal == doctor.getSal();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public double getSal() {return sal;}public void setSal(double sal) {this.sal = sal;}public Doctor(String name, int age, String job, char gender, double sal) {this.name = name;this.age = age;this.job = job;this.gender = gender;this.sal = sal;}

6.写出向上转型和向下转型代码 

public class HomeWork11 {public static void main(String[] args) {// 向上转型代码// 父类的引用指向子类对象Person2 p = new Student();p.run(); // student runp.eat(); // person eat// 向下转型代码// 把指向子类对象的父类引用,转成指向子类对象的子类引用Student student = (Student) p;// 注意动态绑定问题student.run(); // student runstudent.study(); // student study..// 因为Student是Person2的子类,所以可以调用父类eat方法student.eat(); // person eat}
}class Person2 {public void run() {System.out.println("person run");}public void eat() {System.out.println("person eat");}
}class Student extends Person2 {@Overridepublic void run() {System.out.println("student run");}public void study() {System.out.println("student study..");}
}

7.判断输出结果

public class HomeWork14 {public static void main(String[] args) {C c = new C();}
}class A {public A() {System.out.println("我是A类");}
}class B extends A {public B() {System.out.println("我是B类的无参构造");}public B(String name) {System.out.println(name + "我是B类的有参构造");}
}class C extends B {public C() {this("hello");System.out.println("我是C类的无参构造");}public C(String name) {super("hahah");System.out.println("我是C类的有参构造");}
}

运行结果:

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

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

相关文章

字体文件压缩

技术点 npm、html、font-spider 实现原理 个人理解&#xff1a;先引入原先字体&#xff0c;然后重置字符为空&#xff0c;根据你自己填充文字、字符等重新生成字体文件&#xff0c;因此在引入的时候务必添加自己使用的文字、字符等&#xff01;&#xff01;&#xff01; 实…

PY32F002B

墨水屏&#xff1a; 前景和背景 在屏幕和图像处理中&#xff0c;前景和背景是两个重要的概念&#xff1a; 前景&#xff08;Foreground&#xff09;&#xff1a; 指的是图像或屏幕上最显著的部分&#xff0c;通常是用户关注的主要内容。例如&#xff0c;在一张照片中&#xf…

10.3学习

1.循环依赖 循环依赖其实就是循环引用&#xff0c;也就是两个或者两个以上的 Bean 互相持有对方&#xff0c;最终形成闭环。比如A 依赖于B&#xff0c;B又依赖于A Spring中循环依赖场景有: prototype 原型 bean循环依赖 构造器的循环依赖&#xff08;构造器注入&#xff09;…

PIKACHU | PIKACHU 靶场 XSS 后台配置

关注这个靶场的其他相关笔记&#xff1a;PIKACHU —— 靶场笔记合集-CSDN博客 PIKACHU 自带了一个 XSS 平台&#xff0c;可以辅助我们完成 XSS 攻击&#xff0c;但是该后台需要配置数据库以后才能使用。本教程&#xff0c;就是教大家如何配置 PIKACHU XSS 平台的。 PIKACHU XS…

资源《Arduino 扩展板4-单游戏摇杆》说明。

资源链接&#xff1a; Arduino 扩展板4-单游戏摇杆 1.文件明细&#xff1a; 2.文件内容说明 包含&#xff1a;AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程&#xff0c;采用AD做的。 该文件打板后配合Arduino使用&#xff0c;属于Arduino的扩展板。 该文件…

深度学习的应用综述

文章目录 引言深度学习的基本概念深度学习的主要应用领域计算机视觉自然语言处理语音识别强化学习医疗保健金融分析 深度学习应用案例公式1.损失函数(Loss Function) 结论 引言 深度学习是机器学习的一个子领域&#xff0c;通过模拟人脑的神经元结构来处理复杂的数据。近年来&…

k8s实战-2

k8s实战-2 一、Deployment1.多副本2.扩缩容3.自愈&故障转移4.滚动更新5.版本回退 二、Service1.ClusterIP2.NodePort 总结 一、Deployment Deployment 是 k8s 中的一个资源对象&#xff0c;用于管理应用的副本&#xff08;Pods&#xff09;。它的主要作用是确保集群中运行…

【Linux】进程替换、命令行参数及环境变量(超详解)

目录 进程替换 替换函数的含义 命令行参数 环境变量 PATH 进程替换 我们先看代码&#xff1a; 1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5 printf("process...begin!\n");6 7 execl("/usr/bin/ls","ls"…

论文翻译 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust

摘要 近年来&#xff0c;NLP从业者集中于以下实践:(i)导入现成的预训练(掩码)语言模型;(ii)在CLS令牌的隐藏表示(随机初始化权重)上附加多层感知器;(iii)在下游任务(MLP-FT)上微调整个模型。这一过程在标准的NLP基准上产生了巨大的收益&#xff0c;但这些模型仍然很脆弱&#x…

尝试从 http://pypi.doubanio.com/simple 这个索引源安装 webdriver 时出现了问题

问题如下&#xff1a; WARNING: The repository located at pypi.doubanio.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow …

从介质失效看互联网时代的信息过载

来读一篇文章&#xff1a;90年代的硬盘已大规模变砖&#xff0c;没啥好担心的&#xff0c;好事。 结合我两年前的粗浅认知 互联网时代无信息&#xff0c;按照 “动” 的观念看&#xff0c;当信息越来越多&#xff0c;信息密度越来越大时&#xff0c;信息的寿命就会越来越短&am…

离线安装docker

背景描述 项目需要在研发环境虚拟机上安装docker部署应用。 所在的服务器是一个内网&#xff0c;无法访问到外网环境。 服务器OS版本是 麒麟V10 linux 安装docker 安装包下载 获取所需版本的docker binary包&#xff0c;官方链接https://download.docker.com/linux/stati…

CoRL 2024 麻省理工学院提出T3触觉Transformer,打破触觉感知的壁垒,重塑未来机器人

在智能机器人领域&#xff0c;触觉感知的研究正逐渐成为关注的焦点。然而&#xff0c;如何让机器人通过触觉更智能地感知和操作&#xff0c;依然是一个未解决的挑战。基于相机的触觉感知是一种通过在软弹性体下嵌入相机来捕获与环境的细粒度交互的感知方法&#xff0c;是最流行…

[Python学习日记-39] 闭包是个什么东西?

[Python学习日记-39] 闭包是个什么东西&#xff1f; 简介 闭包现象 闭包意义与作用 简介 在前面讲函数和作用域的时候应该提到过&#xff0c;当函数运行结束后会由 Python 解释器自带的垃圾回收机制回收函数内作用域已经废弃掉的变量&#xff0c;但是在 Python 当中还有一种…

MySQL--数据库约束(详解)

目录 一、前言二、概念三、数据库约束3.1 约束类型3.1.1 NOT NULL 约束3.1.2 UNIQUE (唯一&#xff09;3.1.3 DEFAULT&#xff08;默认&#xff09;3.1.4 PRIMARY KEY&#xff08;主键&#xff09;3.1.5 FOREIGN KEY&#xff08;外键&#xff09;3.1.6 CHECK 四、总结 一、前言…

Golang | Leetcode Golang题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; func fourSumCount(a, b, c, d []int) (ans int) {countAB : map[int]int{}for _, v : range a {for _, w : range b {countAB[vw]}}for _, v : range c {for _, w : range d {ans countAB[-v-w]}}return }

STM32新建工程-基于库函数

目录 一、创建一个新工程 二、为工程添加文件和路径 三、创建一个main.c文件&#xff0c;并调试 四、修改一些配置 五、用库函数进行写程序 1、首先加入一些库函数和头文件 2、编写库函数程序 一、创建一个新工程 我这里选择STM32F103C8的型号&#xff0c;然后点击OK。 …

如何提取b站的视频字幕,下载视频

打开视频地址 按F12打开—开发者工具 在开发者工具打开Network 过滤器关键字&#xff1a; 自动生成字幕&#xff1a;ai_subtitle 自制&#xff1a;json 打开/关闭字幕 刷新页面 找到字幕 点选字幕的respond 将方框中的内容复制&#xff1b; 复制到&#xff1a;https://www.drea…

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC 第一节 硬件解读第二节 CubeMX配置第三节 代码编写 第一节 硬件解读 STM32的ADC是12位&#xff0c;通过硬件过采样扩展到16位&#xff0c;模数转换器嵌入到STM32L071xx器件中。有16个外部通道和2个内部通道&#xf…

github双重验证(2FA)启用方法

一、双重验证-2FA 在去年看到过说github启用双重验证的通知&#xff0c;觉得做为一个普通开发者&#xff0c;可能没有这么快会要求启用。结果&#xff0c;今天早晨一来就收到了邮件&#xff0c;要求说在11月底完成2FA的认证&#xff0c;否则权限受限。真是无了语。所谓2FA好理…