diff --git "a/30 \350\256\270\346\201\251\346\260\221/2023java\347\254\254\345\215\201\344\272\224\346\254\241\350\257\276.md" "b/30 \350\256\270\346\201\251\346\260\221/2023java\347\254\254\345\215\201\344\272\224\346\254\241\350\257\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..6d2d3f990cb7c478a4f9249c87205ca316932c27 --- /dev/null +++ "b/30 \350\256\270\346\201\251\346\260\221/2023java\347\254\254\345\215\201\344\272\224\346\254\241\350\257\276.md" @@ -0,0 +1,429 @@ +## 多态练习 + +### 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 + +// ## 多态练习 +// +//### 1、图形 +// +//(1)父类Graphic图形 +public class Graphic { + public double area(){ + return 0.0; + } + public double perimeter(){ + return 0.0; + } + public String getInfo(){ + return "图形面积和周长"; + } +} +//- public double area()方法:返回0.0 +//- public double perimeter()方法:返回0.0 +//- public String getInfo()方法,返回图形面积和图形周长 +// +//(2)子类Circle圆继承Graphic图形 +class Circle extends Graphic{ + private double radius; + + @Override + public String toString() { + return "Circle{" + + "radius=" + radius + + '}'; + } + + public Circle(double radius) { + this.radius = radius; + } + + public double getRadius() { + return radius; + } + + public void setRadius(double radius) { + this.radius = radius; + } + + @Override + public double area() { + double mj = Math.PI*(radius*radius); + return mj; + } + + @Override + public double perimeter() { + double zc = 2*Math.PI*radius; + return zc; + } + + @Override + public String getInfo() { + return "半径"+radius+"面积"+area()+"周长"+perimeter(); + } +} +//- 包含属性:radius,属性私有化 +//- 包含get/set方法 +//- 重写area()求面积方法 +//- 重写perimeter()求周长方法 +//- 重写getInfo()方法,返回圆的半径,面积和周长 +// +//(3)子类矩形Rectangle继承Graphic图形 +class Rectangle extends Graphic{ + private double length; + private double width; + + public Rectangle(double length, double width) { + this.length = length; + this.width = 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() { + double mj = length*width; + return mj; + } + + @Override + public double perimeter() { + double zc = (length+width)*2; + return zc; + } + + @Override + public String getInfo() { + return "长"+length+"宽"+width+"面积"+area()+"周长"+perimeter(); + } +} +//- 包含属性:length、width,属性私有化 +//- 包含get/set方法 +//- 重写area()求面积方法 +//- 重写perimeter()求周长方法 +//- 重写getInfo()方法,返回长和宽,面积、周长信息 +// +//(4)在测试类中,新建一个比较图形面积的方法,再建一个比较图形周长的方法,main方法中创建多个圆和矩形对象,再调用方法比较他们的周长或面积。 + +class TestGraphic{ + public static void main(String[] args) { + Circle ci = new Circle(3.2); + System.out.println(ci.area()); + System.out.println(ci.perimeter()); + Rectangle re = new Rectangle(2,5); + System.out.println(re.area()); + System.out.println(re.perimeter()); + biji(ci.area(),ci.perimeter(),re.area(),re.perimeter()); + } + +// private static void biji(double area, double perimeter, double area1, double perimeter1) { +// } + + public static String biji(double area, double perimeter, double jxarea, double jxperimeter){ + if (area>jxarea){ + System.out.println("圆形面积大"); + }else { + System.out.println("矩形面积大"); + } + if (perimeter>jxperimeter){ + System.out.println("圆形周长大"); + }else { + System.out.println("矩形周长大"); + } + return ""; + } +} +32.169908772759484 +20.106192982974676 +10.0 +14.0 +圆形面积大 +圆形周长大 +``` + + + +### 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 作业; + +import java.util.ArrayList; +import java.util.Scanner; + +public class Employee { + private String name; + + 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(); + } +} + +//- 有姓名属性,私有化,提供get/set方法 +//- public double earning():代表实发工资,返回0.0 +//- public String getInfo():显示姓名和实发工资 +// +//(2)声明MyDate类型 +class MyDate{ + private int year; + private int month; + private int day; + + public MyDate(int year, int month, int day) { + this.year = year; + this.month = month; + this.day = day; + } + + 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 getDay() { + return day; + } + + public void setDay(int day) { + this.day = day; + } + public String toString() { + return year + "年" + month + "月" + day + "日"; + } + public String getInfo(){ + return year+"年"+month+"月"+day+"日"; + } +} +//- 有int类型的年,月,日属性,私有化,提供get/set方法 +//- 提供public String getInfo(),返回“xxxx年xx月xx日” +// +//(3)声明一个子类SalaryEmployee正式工,继承父类Employee +class SalaryEmployee extends Employee{ + private double xc; + private MyDate rq; + public double getXc() { + return xc; + } + + public void setXc(double xc) { + this.xc = xc; + } + + public MyDate getRq() { + return rq; + } + + public void setRq(MyDate rq) { + this.rq = rq; + } + + public SalaryEmployee(String name, double xc, MyDate rq) { + super(name); + this.xc = xc; + this.rq = rq; + } + + public SalaryEmployee(String name) { + super(name); + } + + @Override + public double earning() { + double shifa = getXc(); + return shifa; + } + public String getInfo(){ + return "姓名"+getName()+"实发工资"+earning()+"生日"+rq; + } +} +//- 增加属性,double类型的薪资,MyDate类型的出生日期,私有化,提供get/set方法 +//- 重写方法,public double earning()返回实发工资, 实发工资 = 薪资 +//- 重写方法,public String getInfo():显示姓名和实发工资、生日 +// +//(4)声明一个子类HourEmployee小时工,继承父类Employee +class HourEmployee extends Employee{ + double hour; + double money; + public double earning(){ + return hour*money; + } + public String getInfo(){ + return "姓名"+getName()+"实发工资"+earning(); + } + + public HourEmployee(String name, double hour, double money) { + super(name); + this.hour = hour; + this.money = money; + } + // public HourEmployee(String name){ +// super(name); +// } + +} +//- 有属性,double类型的工作小时数和每小时多少钱 +//- 重写方法,public double earning()返回实发工资, 实发工资 = 每小时多少钱 * 小时数 +//- 重写方法,public String getInfo():显示姓名和实发工资,时薪,工作小时数 +// +//(5)声明一个子类Manager经理,继承SalaryEmployee +class Manager extends SalaryEmployee{ + private double bonus; + private MyDate shijian; + + + public double getBonus() { + return bonus; + } + + public void setBonus(double bonus) { + this.bonus = bonus; + } + + public MyDate getShijian() { + return shijian; + } + + public void setShijian(MyDate shijian) { + this.shijian = shijian; + } + public Manager(String name, double bonus, MyDate shijian) { + super(name); + this.bonus = bonus; + this.shijian = shijian; + } + @Override + public double earning() { + return getXc()*(1+bonus); + } + public String getInfo(){ + return "姓名"+getName()+"生日"+getShijian()+"奖金比例"+bonus; + } +} +//- 增加属性:奖金比例,私有化,提供get/set方法 +//- 重写方法,public double earning()返回实发工资, 实发工资 = 薪资 *(1+奖金比例) +//- 重写方法,public String getInfo():显示姓名和实发工资,生日,奖金比例 +//(6)声明一个员工数组,存储各种员工,你现在是人事,遍历查看每个人的详细信息,并统计实发工资总额,通知财务准备资金。 +class Test{ + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + Employee[] sz = new Employee[3]; + sz[0]=new Manager("liu",0.5,new MyDate(2023,5,11)); + sz[1]=new SalaryEmployee("shao", 0.6, new MyDate(2023, 5, 11)); + sz[2]=new HourEmployee("hai", 5, 20); + System.out.println("请输入月份"); + String rq = sc.next(); + for (int i = 0; i < sz.length; i++) { + System.out.println(sz[i].getInfo()); + if (sz[i].getInfo().equals(rq)){ + System.out.println("拿生日礼物"); + } + } + +// for (int i = 0; i < sz.length; i++) {a +// System.out.println(sz[i].getInfo()); +// } + } +} +//(7)从键盘输入当期月份值,如果他是正式工(包括SalaryEmployee和Manager),并且是本月生日的,通知领取生日礼物。 + + + +``` \ No newline at end of file