diff --git "a/05 \346\236\227\344\274\237\345\275\254/20230510 \345\244\232\346\200\201.md" "b/05 \346\236\227\344\274\237\345\275\254/20230510 \345\244\232\346\200\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..74c15b78fa40feb7b91d7102a9081892ad87b82d --- /dev/null +++ "b/05 \346\236\227\344\274\237\345\275\254/20230510 \345\244\232\346\200\201.md" @@ -0,0 +1,394 @@ +# 作业1 + +## 多态练习 + +### 1、图形 + +(1)父类Graphic图形 + +- public double area()方法:返回0.0 +- public double perimeter()方法:返回0.0 +- public String getInfo()方法,返回图形面积和图形周长 + +(2)子类Circle圆继承Graphic图形 + +- 包含属性:radius,属性私有化 +- 包含get/set方法 +- 重写area()求面积方法 +- 重写perimeter()求周长方法 +- 重写getInfo()方法,返回圆的半径,面积和周长 + +(3)子类矩形Rectangle继承Graphic图形 + +- 包含属性:length、width,属性私有化 +- 包含get/set方法 +- 重写area()求面积方法 +- 重写perimeter()求周长方法 +- 重写getInfo()方法,返回长和宽,面积、周长信息 + +(4)在测试类中,新建一个比较图形面积的方法,再建一个比较图形周长的方法,main方法中创建多个圆和矩形对象,再调用方法比较他们的周长或面积。 + +```java +package 多态; + +public class Graphic { + public double area(){ //面积 + return 0.0; + } + public double perimeter(){ //周长 + return 0.0; + } + public String getlnfo(){ + return area()+","+perimeter(); + } +} +class Circle extends Graphic{ //子类圆 + private double radius; + + public double getRadius() { + return radius; + } + + public void setRadius(double radius) { + this.radius = radius; + } + + @Override + public double area() { + return Math.PI * radius * radius; + } + + @Override + public double perimeter( ) { + return 2*Math.PI*radius; + } + + @Override + public String getlnfo( ) { + return "半径:"+radius+",面积:"+area()+",周长:"+perimeter(); + } +} +class Rectangle extends Graphic{ //子类矩形 + private double length; + private double width; + + public double getLength() { + return length; + } + + public void setLength(double length) { + this.length = length; + } + + public double getWidth() { + return width; + } + + public void setWidth(double width) { + this.width = width; + } + + @Override + public double area() { + return length*width; + } + + @Override + public double perimeter() { + return (length+width)*2; + } + + @Override + public String getlnfo() { + return "长:"+length+",宽"+width+",面积:"+area()+",周长:"+perimeter(); + } +} +``` + +测试类 + +```java +package 多态; + +public class GraphicDemo { + public static void main(String[] args) { + Circle c = new Circle(); + c.setRadius(5); + System.out.println("圆的" + c.getlnfo()); + + System.out.println("-----------------"); + Rectangle r = new Rectangle(); + r.setLength(10); + r.setWidth(5); + System.out.println("矩形" + r.getlnfo()); + System.out.println("-----------------"); + GraphicDemo demo = new GraphicDemo(); + demo.compare(c,r); //调用方法,并赋予两个对象 + } + + public void compare(Circle c , Rectangle r ) { //传入两个类 + // 比周长 + if (c.perimeter() > r.perimeter()) { + System.out.println("圆的周长更长:" + c.perimeter()); + } else if (c.perimeter() == r.perimeter()) { + System.out.println("一样长"); + } else { + System.out.println("矩形的周长更长:" + r.perimeter()); + } + } +} + +``` + +# 作业2 + +### 2、员工 + +(1)声明一个父类Employee员工类型, + +- 有姓名属性,私有化,提供get/set方法 +- public double earning():代表实发工资,返回0.0 +- public String getInfo():显示姓名和实发工资 + +(2)声明MyDate类型 + +- 有int类型的年,月,日属性,私有化,提供get/set方法 +- 提供public String getInfo(),返回“xxxx年xx月xx日” + +(3)声明一个子类SalaryEmployee正式工,继承父类Employee + +- 增加属性,double类型的薪资,MyDate类型的出生日期,私有化,提供get/set方法 +- 重写方法,public double earning()返回实发工资, 实发工资 = 薪资 +- 重写方法,public String getInfo():显示姓名和实发工资、生日 + +(4)声明一个子类HourEmployee小时工,继承父类Employee + +- 有属性,double类型的工作小时数和每小时多少钱 +- 重写方法,public double earning()返回实发工资, 实发工资 = 每小时多少钱 * 小时数 +- 重写方法,public String getInfo():显示姓名和实发工资,时薪,工作小时数 + +(5)声明一个子类Manager经理,继承SalaryEmployee + +- 增加属性:奖金比例,私有化,提供get/set方法 +- 重写方法,public double earning()返回实发工资, 实发工资 = 薪资 *(1+奖金比例) +- 重写方法,public String getInfo():显示姓名和实发工资,生日,奖金比例 + +(6)声明一个员工数组,存储各种员工,你现在是人事,遍历查看每个人的详细信息,并统计实发工资总额,通知财务准备资金。 + +(7)从键盘输入当期月份值,如果他是正式工(包括SalaryEmployee和Manager),并且是本月生日的,通知领取生日礼物。 + +```java +package 员工; + +public class Employee { //员工类型 + private String name; + + public Employee() { + } + + public Employee(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double earning() { //代表实发工资 + return 0.0; + } + + public String getInfo() { + return name + earning(); + } +} + +class MyDate { + private int year; + private int month; + private int date; + + public MyDate(int year, int month, int date) { + this.year = year; + this.month = month; + this.date = date; + } + + public MyDate() { + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + public int getMonth() { + return month; + } + + public void setMonth(int month) { + this.month = month; + } + + public int getDate() { + return date; + } + + public void setDate(int date) { + this.date = date; + } + + @Override + public String toString() { + return year + "年" + month + "月" + date + "日"; + } +} + +class SalaryEmployee extends Employee { //正式工 + private double salary; + private MyDate day; + + public SalaryEmployee(String name) { + super(name); + } + + public SalaryEmployee(String name, double salary, MyDate day) { + super(name); + this.salary = salary; + this.day = day; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } + + public MyDate getDay() { + return day; + } + + public void setDay(MyDate day) { + this.day = day; + } + + @Override + public double earning() { + return salary; + } + + @Override + public String getInfo() { + return "姓名:" + getName() + ",实发工资:" + earning() + ",生日" + day; + } +} + +class HourEmployee extends Employee { //小时工 + private double hours; + private double much; + + public HourEmployee(String name) { + super(name); + } + + public HourEmployee(String name, double hours, double much) { + super(name); + this.hours = hours; + this.much = much; + } + + @Override + public double earning() { + return hours * much; + } + + @Override + public String getInfo() { + return "姓名:" + getName() + ",实发工资:" + earning() + ",时薪:" + much + ",工作小时数:" + hours; + } +} + +class Manager extends SalaryEmployee { //经理 + + private double ratio; + + public Manager(String name) { + super(name); + } + + + public Manager(String name, double ratio) { + super(name); + this.ratio = ratio; + } + + public Manager(String name, double salary, MyDate day, double ratio) { + super(name, salary, day); + this.ratio = ratio; + } + + public double getRatio() { + return ratio; + } + + public void setRatio(double ratio) { + this.ratio = ratio; + } + + @Override + public double earning() { + return getSalary() * (1 + ratio); + } + + @Override + public String getInfo() { + return "姓名:" + getName() + ",实发工资:" + earning() + ",生日:" + getDay() + ratio; + } +} + +``` + + + +测试类 + +```java +package 员工; + +import java.awt.*; +import java.util.Scanner; + +public class EmployeeDemo { + public static void main(String[] args) { + MyDate date = new MyDate(1998, 2, 4); + Employee ho = new HourEmployee("林被", 8, 20); + Employee ma = new Manager("林总", 0.3); + Employee sa = new SalaryEmployee("老王", 22, date); + Employee[] arr = {ho, ma, sa}; + for (int i = 0; i < arr.length; i++) { + System.out.println(arr[i].getInfo()); + } + + Scanner sc = new Scanner(System.in); + System.out.println("请输入当前月份"); + int as = sc.nextInt(); + for (int i = 0; i < arr.length; i++) { + if (arr[i] instanceof SalaryEmployee || arr[i] instanceof Manager) { + if (((SalaryEmployee) arr[i]).getDay().getMonth() == date.getMonth()) { + System.out.println(arr[i].getName() + "请领取你的的生日礼物"); + } + } + } + } +} +``` +