老韩Java第八章作业汇总(自做)
先把作业打下来,然后一题题做。
题目1:1.定义一个Person类 {name, age, job},初始化Person对象数组,有3个person对象,并按照age从大到小进行排序,提示,使用冒泡排序Homework01.java
测试类
package HomeWork;public class Homework01 {public static void main(String[] args) {Person[] p = new Person[5];p[0] = new Person("zhang",23,"工程师");p[1] = new Person("zhao",26,"工程师");p[2] = new Person("qian",21,"工程师");p[3] = new Person("shun",22,"工程师");p[4] = new Person("li",24,"工程师");System.out.println("排序之前...");for(int i =0;i<p.length;i++){System.out.println(p[i].toString());}//开始排序....for(int i = 0;i<p.length-1;i++){for(int j = 0;j<p.length-1-i;j++){if(p[j].age > p[j+1].age ){Person tmp = p[j];p[j] = p[j+1];p[j+1] = tmp;}}}System.out.println("排序之后...");for(int i =0;i<p.length;i++){System.out.println(p[i].toString());}}
}
class Person{public String name;public int age;public String 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:写出四种访问修饰符和各自的访问权限 Homework02.java
自身 | 同包子类 | 不同包子类 | 同包类 | 其他类 | |
---|---|---|---|---|---|
private | 访问 | 继承 | 继承 | 访问 | 访问 |
package | 访问 | 继承 | 继承 | 访问 | 访问 |
protected | 访问 | 继承 | 继承 | 访问 | 访问 |
public | 访问 | 继承 | 继承 | 访问 | 访问 |
题目3:编写老师类HomeworkO3.java
- 要求有属性“姓名name”,“年龄age”,“职称post”,“基本工资salary"(2)
- 编写业务方法,introduce ( ,实现输出一个教师的信息。
- 编写教师类的三个子类:教授类、副教授类、讲师类。工资级别分别为:教授为1.3、副教授为1.2、讲师类1.1。在三个子类里面都重写父类的introduce () 方法。
- 定义并初始化一个老师对象,调用业务方法,实现对象基本信息的后台打印.
效果
代码
package HomeWork;public class HomeWork02 {public static void main(String[] args) {Teacher t1 = new Professor("张",23,"教授",222222.0);Teacher t2 = new AssProfessor("张",24,"副教授",2000.0);Teacher t3 = new Lecturer("王",35,"讲师",900000.0);System.out.println(t1.introduce());System.out.println(t2.introduce());System.out.println(t3.introduce());}
}class Teacher{public String name;public int age;public String post;public double salary;public Teacher(String name, int age, String post, double salary) {this.name = name;this.age = age;this.post = post;this.salary = salary;}public String introduce() {return "Teacher{" +"name='" + name + '\'' +", age=" + age +", post='" + post + '\'' +", salary=" + salary +'}';}}
class Professor extends Teacher{public Professor(String name, int age, String post, double salary) {super(name, age, post, salary);}public String introduce() {return "Teacher{" +"name='" + name + '\'' +", age=" + age +", post='" + post + '\'' +", salary=" + salary*1.3 +'}';}}class AssProfessor extends Teacher {public AssProfessor(String name, int age, String post, double salary) {super(name, age, post, salary);}public String introduce() {return "Teacher{" +"name='" + name + '\'' +", age=" + age +", post='" + post + '\'' +", salary=" + salary*1.2 +'}';}
}class Lecturer extends Teacher{public Lecturer(String name, int age, String post, double salary) {super(name, age, post, salary);}public String introduce() {return "Teacher{" +"name='" + name + '\'' +", age=" + age +", post='" + post + '\'' +", salary=" + salary*1.1 +'}';}
}
题目4 通过继承实现员工工资核算打印功能
父类:员工类
子类:部门经理类、普通员工类
(1)部门经理工资=1000+单日工资天数等级(1.2)。(2)普通员工工资=单日工资天数等级(1.0) ;
(3)员工属性:姓名,单日工资,工作天数
(4)员工方法(打印工资)
(5)普遍员工及部门经理都是员工子类,需要重写打印工资方法。
(5)定义并初始化普通员工对象,调用打印工资方法输入工资,定义并初始化部门经理对象,调用打印工资方法输入工咨
效果
代码
package HomeWork;public class HomeWork03 {public static void main(String[] args) {Worker worker = new Worker("张",260,20);System.out.println(worker.PrintSalary());Manager manager = new Manager("王",300,26);System.out.println(manager.PrintSalary());}
}
class Emp{public String name;public int PerSalary;public int WorkCount;public Emp(String name, int perSalary, int workCount) {this.name = name;PerSalary = perSalary;WorkCount = workCount;}public String PrintSalary(){return "名字:" + this.name + "工资为:" + this.PerSalary*this.WorkCount + "元";}
}
class Manager extends Emp {public Manager(String name, int perSalary, int workCount) {super(name, perSalary, workCount);}@Overridepublic String PrintSalary() {return "名字:" + this.name + "工资为:" + (1000+this.PerSalary*this.WorkCount*1.2) + "元";}
}class Worker extends Emp{public Worker(String name, int perSalary, int workCount) {super(name, perSalary, workCount);}@Overridepublic String PrintSalary() {return "名字:" + this.name + "工资为:" + this.PerSalary*this.WorkCount + "元";}
}
题目5 设计父类—员工类。子类:工人类,农民类,教师类,科学家类,服务生类。
(1)其中工人,农民,服务生只有基本工资
(2)教师除基本工资外,还有课酬(元/天)(3)科学家除基本工资外还有年终奖
(4)编写一个测试类,将各种类型的员工的全年工资打印出来
效果
代码
package HomeWork;public class HomeWork04 {public static void main(String[] args) {Emp[] ep = new Emp[5];ep[0] = new Farmer(2200.0);ep[1] = new Worker(2200.0);ep[2] = new Serve(2200.0);ep[3] = new teacher(2200.0,500.0);ep[4] = new scientist(2200.0,999999.0);for(int i =0;i< ep.length;i++){ep[i].printSalary();}}
}
class Emp{public double salary;public Emp(double salary) {this.salary = salary;}public void printSalary(){System.out.println("全年工资为:" + salary*12);}
}
class Worker extends Emp{public Worker(double salary) {super(salary);}@Overridepublic void printSalary() {System.out.println("工人的工资为:" + this.salary*12);}
}
class Farmer extends Emp{public Farmer(double salary) {super(salary);}@Overridepublic void printSalary() {System.out.println("农民的工资为:" + this.salary*12);}
}
class Serve extends Emp{public Serve(double salary) {super(salary);}@Overridepublic void printSalary() {System.out.println("服务员的工资为:" + this.salary*12);}
}
class teacher extends Emp{public double fee;public teacher(double salary,double fee) {super(salary);this.fee = fee;}@Overridepublic void printSalary() {System.out.println("教师的工资为:" + (this.salary+this.fee)*12);}
}
class scientist extends Emp{public double yearfee;public scientist(double salary,double yearfee) {super(salary);this.yearfee = yearfee;}@Overridepublic void printSalary() {System.out.println("科学家的工资为:" + ((this.salary*12)+this.yearfee));}
}
题目6:6.在父类和子类中通过this和super都可以调用哪些属性和方法,假定Grand.Father和Son在同一个包
Father 访问:
//super可以访问 name与g1方法
//this可以访问 name g1 id score f方法
Sion类可以访问
//super可以访问 id name 父类 g1 f1
//this可以访问 id name 自己类的g1 自己类的f1,自己类的show()
package HomeWork;public class HomeWork06 {}class Grand{String name ="AA";private int age = 100;public void g1(){}
}class Father extends Grand {String id = "001";private double score;public void f1(){}
}class Son extends Father{String name = "bb";public void g1(){}private void show(){}}
}
题目7:下面代码运行效果
package HomeWork;public class HomeWork05 {public static void main(String[] args) {new Demo().test();new Demo("John").test();}}class Test{String name = "Rose";Test(){System.out.println("Test");}Test(String name){this.name = name;}}
class Demo extends Test{String name = "Jack";Demo(){super();System.out.println("Demo");}Demo(String s){super(s);}public void test(){System.out.println(super.name);System.out.println(this.name);}}
效果
题目8:存款取款
效果
代码
package HomeWork;public class HomeWork08 {public static void main(String[] args) {SavingAccount sv = new SavingAccount(5500);sv.deposit(500);System.out.println(sv.getBalance());}
}
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;}
}class CheckinigAccount extends BankAccount{public CheckinigAccount(double initialBalance) {super(initialBalance);}public void deposit(double amount){super.deposit(amount-1);}public void withdraw(double amount){super.withdraw(amount+1);}
}class SavingAccount extends BankAccount{private int cnt = 0;private double rate = 0.01;public SavingAccount(double initialBalance) {super(initialBalance);}//计数@Overridepublic void deposit(double amount) {if(cnt>3)super.deposit(amount-1);elsesuper.deposit(amount);cnt++;}@Overridepublic void withdraw(double amount) {if(cnt>3)super.withdraw(amount+1);elsesuper.withdraw(amount);cnt++;}public void setCnt(int cnt) {this.cnt = cnt;}public void earnMonthlyInterest(){cnt = 3;deposit(super.getBalance()*rate);}
}
题目9:9.设计一个Point类,
其x和y坐标可以通过构造器提供。提供一个子类LabeledPoint,其构造器接受一个标签值和x,y坐标,比如:new LabeledPoint(“Black
Thursday” ,1929,230.07),写出对应的构造器即可
效果
题目不需要啥效果,main函数能运行就挺好。
代码
package HomeWork;public class HomeWork09 {public static void main(String[] args) {LabeledPoint lb = new LabeledPoint("Black",1929,230.07);}
}class Point {private double x;private double y;public Point(double x, double y) {this.x = x;this.y = y;}
}class LabeledPoint extends Point{private String label;public LabeledPoint(String label,double x, double y) {super(x, y);this.label = label;}
}
题目10 : 编写Doctor类{name, age, job, gender, sal}
相应的getter()和setter()方法,5个参数的构造器,重写父类的equals()方法: publicboolean equals(Object obj),并判断测试类中创建的两个对象是否相等。相等就是判断属性是否相同
效果
代码
package HomeWork;import java.util.Objects;public class HomeWork10 {public static void main(String[] args) {Doctor d1 = new Doctor("张三",45,"主任医师",'男',21000);Doctor d2 = new Doctor("李四",35,"副主任医师",'男',23000);Doctor d3 = new Doctor("张三",45,"主任医师",'男',21000);Doctor d4 = new Doctor("赵六",55,"副主任医师",'男',21000);System.out.println("d1 与 d3 相等么?" + d1.equals(d3));}
}
class Doctor{private String name;private int age;private String job;private char gender;private double salary;public Doctor(String name, int age, String job, char gender, double salary) {this.name = name;this.age = age;this.job = job;this.gender = gender;this.salary = salary;}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 getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Doctor doctor = (Doctor) o;return age == doctor.age && gender == doctor.gender && Double.compare(doctor.salary, salary) == 0 && Objects.equals(name, doctor.name) && Objects.equals(job, doctor.job);}}
题目11:现有Person类
里面有方法run,eat,Student类继承了Person类,并重写了run方法,自定义了study()方法,试着写出对象向上转型和向下转型的代码,并写出各自都可以调用哪些方法,并写出方法输出什么?
向上转型可以输出
eat 与run
向下转型可以输出 eat ,run study
package HomeWork;public class HomeWork11 {public static void main(String[] args) {Person p = new Student();//eat runp = (Student) p;//p向下转型 eat run study}
}
class Person{public void run() {System.out.println("person run");}public void eat() {System.out.println("person eat");}
}class Student extends Person {public void run(){System.out.println("student run");}public void study() {System.out.println("student study");}
}
题目12: ==与equals的区别
== 是一个比较运算符,在用于基本数据类型中,可以判断值是否相等,在用于引用类型中,可以判断两个对象是否相等。
equals是object类的方法,Java类都可以使用equals,不可以用于基本数据类型,可以默认判断两个对象是否相等,但是子类往往重写该方法,比较对象的属性是否相等。
题目13 案例题目描述:
(1)做一个Student类,Student类有名称(name),性别(sex),年龄(age),学号(stu_id),做合理封装,通过构造器在创建对象时将4个属性赋值。
(2)写一个Teacher类,Teacher类有名称(name),性别(sex),年龄(age),工龄(work_age),做合理封装,通过构造器在创建对象时将4个属性赋值。
(3)抽取一个父类Person类,将共同属性和方法放到Person类
(4)学生需要有学习的方法(study),在方法里写生“我承诺,我会好好学习。”。
(5)教师需要有教学的方法(teach),在方法里写上“我承诺,我会认真教学。”。
(6)学生和教师都有玩的方法(play),学会玩的是足球,老师玩的是象棋,此方法是返回字符串的,分别返回“xx爱玩足球”和“xx爱玩象棋”(其中x分别代表学生和老师的姓名)。因为玩的方法名称都一样,所以要求此方法定义在父类中,子类实现重写。
(7)定义多态数组,里面保存2个学生和2个教师,要求按年龄从高到低排序,
(8)定义方法,形参为Person类型,功能:调用学生的study或教师的teach方法
效果
代码
package HomeWork;public class HomeWork13 {public static void main(String[] args) {Person[] p = new Person[6];p[0] = new Student("张三",'男',26,"2022");p[1] = new Student("李四",'男',26,"2022");p[2] = new Student("王五",'女',25,"2023");p[3] = new teacher("赵琦",'男',26,12);p[4] = new teacher("李四",'男',26,12);p[5] = new teacher("李四",'男',26,12);for(int i = 0;i<p.length-1;i++){for(int j = 0;j<p.length-1-i;j++){if(p[j].getAge() > p[j+1].getAge() ){Person tmp = p[j];p[j] = p[j+1];p[j+1] = tmp;}}}for(int i=0;i<p.length;i++){method(p[i]);}}public static void method(Person p){if(p instanceof Student){((Student) p).PrintString();}else if(p instanceof teacher){((teacher) p).PrintString();}}
}class Person {private String name;private char sex;private int age;public int getAge() {return age;}public Person(String name, char sex, int age) {this.name = name;this.sex = sex;this.age = age;}public void play(String item){System.out.println(this.name + "爱玩" + item );}public void PrintString() {System.out.println("\n" +"姓名:" + name + "\n" +"年龄:" + age + "\n" +"性别:" + sex + "");}
}class Student extends Person {private String stu_id;public Student(String name, char sex, int age, String stu_id) {super(name, sex, age);this.stu_id = stu_id;}public void study(){System.out.println("我承诺,我会好好学习");}@Overridepublic void play(String item) {super.play(item);}@Overridepublic void PrintString() {System.out.print("学生的信息");super.PrintString();System.out.println("学号:" + stu_id);study();play("足球");System.out.println("------------------------");}
}class teacher extends Person {private int work_age;public teacher(String name, char sex, int age, int work_age) {super(name, sex, age);this.work_age = work_age;}public void teach(){System.out.println("我承诺,我会认真教学");}@Overridepublic void play(String item) {super.play(item);}@Overridepublic void PrintString() {System.out.print("教师的信息");super.PrintString();System.out.println("工龄:" + work_age);teach();play("象棋");System.out.println("------------------------");}
}
题目14 程序阅读题
效果
代码
package HomeWork;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");}public C(String name) {super("hahha");System.out.println("我是C类有参构造");}
}
什么是多态,多态具体体现有哪些
答:多态是面向对象重要特征,是指父类中定义的属性和方法被子类继承之后,可以具有不同数据类型的行为。多态分为编译时多态与运行时多态,编译多态为静态多态,运行多态是动态的。继承在多态中必须存在有继承关系的子类和父类。
- 重写,子类对父类中某些方法进行重新定义,在调用这些方法就会调用子类的方法。
- 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样引用才既能可以调用父类方法,又能调用子类方法。
java的动态绑定机制是什么?
方法看运行类型,属性看编译类型.
1.当调用对象的方法时,该方法会和对象的内存地址/运行类型绑定.
2.当调用对象的属性时,没有动态绑定机制,哪里声明,那里使用。
老韩Java第八章作业汇总(自做)相关推荐
- Java面试题大汇总,2021年附答案解析
最新常Java面试题大汇总(含答案解析)发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全汇总,希望对大家有帮助哈 本套Java面试题大全,全的不能再全,哈哈~ ...
- 【月报】Java知音的四月汇总
往期: Java知音的十月:[月报]Java知音十月汇总 Java知音的十一月:[月报]Java知音十一月汇总 Java知音的十二月:[月报]Java知音十二月汇总 Java知音的一月:[月报]Jav ...
- Java SpringBoot框架依赖汇总
本文阅读格式更佳的版本:Java SpringBoot框架依赖汇总 SpringBoot是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,提供了各种依赖项以简化构建 ...
- Java 锁相关知识汇总及锁升级
Java 锁相关知识汇总及锁升级 锁的基础知识 什么是Synchronized 锁的四种状态 类相关信息 32位虚拟机对象头 64位虚拟机对象头 CAS 锁消除 锁粗化 Lock Record 偏向锁 ...
- Java经典面试题汇总200道
超详细的Java学习资料汇总 Java经典面试题汇总 Java 基础 1. JDK 和 JRE 有什么区别? 2. == 和 equals 的区别是什么? 3. 两个对象的 hashCode()相同, ...
- 2017 《Java技术预备作业》
Java技术预备作业 1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 通过阅读邹欣老师的博客,我认为我所期望的师生关系应该是友好和睦, 互相尊重,互相关心,互利共赢的关系,学生能够从老师的授 ...
- 现任明教教主CCNA Security作业汇总
现任明教教主CCNA Security第二天作业 我最近花了两个月的时间,为我的所有课程(CCNA Security+CCSP)制作了每一天的配套作 业,并且做了相应的视频讲解.本周我会每天共享一天我 ...
- OpenCV3 Java 机器学习使用方法汇总
原文链接:OpenCV3 Java 机器学习使用方法汇总 前言 按道理来说,C++版本的OpenCV训练的版本XML文件,在java中可以无缝使用.但要注意OpenCV本身的版本问题.从2.4 到3 ...
- Java List面试题汇总
转载自 Java List面试题汇总 1.你知道的List都有哪些? 2.List和Vector有什么区别? 3.List是有序的吗? 4.ArrayList和LinkedList的区别?分别用在什么 ...
最新文章
- python解复杂方程_Python数据处理篇之Sympy系列(五)---解方程
- Design Pattern - Iterator(C#)
- hadoop之 YARN配置参数剖析—RM与NM相关参数
- a标签去除下划线css_数据分析师所需的编程技能 : CSS篇
- mysql与mssql中datetime类型字段问题_excel数据存入sqlserver过程中,遇到Datetime的格式问题。...
- 虚拟机控制数据结构 (VMCS)状态转换
- php.ini 是否设置路由,php – 如何在路由INI文件中为Zend Framework中的子域编写路由链?...
- 真假难辨,AI就能分得清?
- html邮箱留言板代码,求HTML留言板代码或模板?
- java松鼠大战代码_松鼠大战2金手指版
- x86架构PC机系统总线概述
- Symbol的基本使用
- 三星 OMNIA7/I8700 刷机 ROM集合
- STM8L051的硬件I2C调试
- vant的安装和引入
- '与或非' 和 逻辑 '与或' 运算
- 查看mysql数据库的定时任务_mysql数据库的定时任务
- 自己留着用的 .net 图片水印 方法
- 错排问题(装错信封问题)
- 基于vue2+element+springboot+mybatis+jpa+mysql的学籍管理系统