笔记总结:

1.Employee为抽象类,两个子类进行继承, public abstract double earning();两个子类分别实现
2.Employee[] emps[i].toString() 才可以完整地输出整个子类的信息!
3.构造函数中参数列表是对象, new HourEmployee("韩梅梅",1002,new MyDate(1998,12,21).....) ,也阔以!
4.读入流:import java.util.Scanner;
Scanner cin=new Scanner(System.in);
int month= cin.nextInt();

实验要求:

实验题目:
编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将该雇员的工资增加100元。 实验目的:对象、继承、封装、多态、抽象类的组合应用。 实验说明:
(1)定义一个Employee类,该类包含:
private成员变量name,number,birthday,其中birthday 为MyDate类的对象;
abstract方法earnings();toString()方法输出对象的name,number和birthday。 (2)MyDate类包含:
private成员变量month,day,year;
toDateString()方法返回日期对应的字符串:xxxx年xx月xx日 (3)定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处理。该类包括:
private成员变量monthlySalary;
实现父类的抽象方法earnings(),该方法返回monthlySalary值;toString()方法输出员工类型信息及员工的name,number,birthday。 (4)参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:
private成员变量wage和hour;
实现父类的抽象方法earnings(),该方法返回wage*hour值;toString()方法输出员工类型信息及员工的name,number,birthday。 (4)定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday,以及该对象生日。当键盘输入本月月份值时,如果本月是某个Employee对象的生日,还要输出增加工资信息。 提示:
//定义People类型的数组
People c1[]=new People[10];
//数组元素赋值
c1[0]=new People("John","0001",20);
c1[1]=new People("Bob","0002",19);
//若People有两个子类Student和Officer,则数组元素赋值时,可以使父类类型的数组元素指向子类。
c1[0]=new Student("John","0001",20,85.0);
c1[1]=new Officer("Bob","0002",19,90.5);

工程组织:

Employee.java:

package Coding;

public abstract class Employee{
private String name;
private int number;
private MyDate birthday; @Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", number=" + number +
", birthday=" + birthday +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getNumber() {
return number;
} public void setNumber(int number) {
this.number = number;
} public MyDate getBirthday() {
return birthday;
} public void setBirthday(MyDate birthday) {
this.birthday = birthday;
} public Employee(String name, int number, MyDate birthday) {
this.name = name;
this.number = number;
this.birthday = birthday;
} public abstract double earning();
}

HourEmployee.java:

package Coding;

public class HourEmployee extends Employee{
private double wage;
private double hour; public HourEmployee(String name, int number, MyDate birthday, double wage, double hour) {
super(name, number, birthday);
this.hour=hour;
this.wage=wage;
} @Override
public String toString() {
return "HourEmployee{" +"name="+super.getName()
+"number="+super.getNumber()
+" birthday="+this.getBirthday().toString()
+ " wage=" + wage
+ ", hour=" + hour + '}';
} @Override
public double earning() {
return wage*hour;
}
}

MyDate.java:

package Coding;

public class MyDate {
private int year,month,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;
} @Override
public String toString() {
return "MyDate{" +
"year=" + year +
", month=" + month +
", day=" + day +
'}';
}
}

SalariedEmployee.java:

package Coding;

//月工资
public class SalariedEmployee extends Employee{
private double monthlySalary;
public SalariedEmployee(String name, int number, MyDate birthday, double monthlySalary) {
super(name,number,birthday);
this.monthlySalary=monthlySalary;
}
@Override
public String toString() {
return "HourEmployee{" +"name="+super.getName()
+"number="+super.getNumber()
+" birthday="+this.getBirthday().toString()
+ " monthlySalary=" + monthlySalary
+ '}';
}
public double earning() {
return monthlySalary*30;
} public double getMonthlySalary() {
return monthlySalary;
} public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
}

PayrollSystem.java:  (测试文件,放到Testing包里 )

package Testing;
import Coding.*; import java.util.Scanner; public class PayrollSystem {
public static void main(String[] args) {
Employee[] emps= new Employee[2];
emps[0] = new SalariedEmployee("李雷",1001,new MyDate(1998,12,21),8800);
emps[1] = new HourEmployee("韩梅梅",1002,new MyDate(1998,12,21),66,6); Scanner cin=new Scanner(System.in);
System.out.println("请输入查找的员工的月份: ");
int month= cin.nextInt();
for(int i=0;i<emps.length;i++){
if(emps[i].getBirthday().getMonth()==month){
System.out.print("加工资加一百!! 说说而已."); }
System.out.println(emps[i].toString());
}
}
}

输出结果:

请输入查找的员工的月份:
12
加工资加一百!! 说说而已.HourEmployee{name=李雷number=1001 birthday=MyDate{year=1998, month=12, day=21} monthlySalary=8800.0}
加工资加一百!! 说说而已.HourEmployee{name=韩梅梅number=1002 birthday=MyDate{year=1998, month=12, day=21} wage=66.0, hour=6.0}

【Java 基础 实验-抽象类应用的练习】(抽象类Employee被SalariedEmployee和HourEmployee继承 , 遍历,Scanner 输出)的更多相关文章

  1. 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类

    ---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...

  2. Java 基础学习总结(一)抽象类和接口

    接触java的时间不是很长,以前对抽象类和接口的定义和区别也是模糊不清,最近拿起学校的教程读了起来,也参阅了网上的博客大神理解和总结,于是决定自己按照自己的理解来总结一下. 抽象类(半成品)   一般 ...

  3. Java基础学习总结(3)——抽象类

    一.抽象类介绍 下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了,使用abstract关键字把enjoy()方法定义成一个抽象方法,定义如下:pub ...

  4. Java基础笔记(十九)——抽象类abstract

    抽象类作为父类,不能实例化自己类型的对象,但可以通过向上转型实例化子类对象. public abstract class Animal{  } 比如eat(); ,每个动物子类都应有自己的方法,那An ...

  5. 【Java基础-实验7】Banking_7 -添加银行透支扣款系统的 thorw异常机制

    实验基本要求: 实验题目 7:(在6基础上修改) 将建立一个 OverdraftException 异常,它由 Account 类的withdraw()方法 抛出. 实验目的: 自定义异常 实验说明: ...

  6. 【Java 基础实验_Bank项目_06】单例模式(Static Bank) , 查询异常输出

    基于上一个实验Banking_5 ,代码先全部复制过来. 笔记心得: 1.SavingAccount() 需要两种构造方法,接受单个参数和两个的 2.Account 有两个类型 SavingAccou ...

  7. Java基础——抽象类和接口

    之所以将抽象类和接口放在一起做笔记,是因为他们之间很难区分又各自独立.在学习完Java程序设计的三大特点(封装.继承.多态)之后,我最大的收获是,慢慢理解了Java语言这种面向对象程序设计的优越性,它 ...

  8. JAVA基础第三章-类与对象、抽象类、接口

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  9. 【Java基础】【09面向对象_多态&抽象类&接口】

    09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...

随机推荐

  1. Npcap.资料

    1.ZC:Npcap 是 WinPcap停更之后的继承者.我尝试了 Win7中发送raw tcp syn,它的代码和 使用WinPcap的基本一致. Developing software with ...

  2. jmeter边界提取器实现数据依赖

    前言:没用cookie管理器去管理cookie是因为它自动匹配的cookie不对 1.已登录接口为案例,查询接口需要依赖登录后返回的cookie 2.首先调登录接口 可以看到 响应头里面返回了一串co ...

  3. python for循环 - python基础入门(11)

    在python开发中,除了前篇文章介绍的while循环还有一个for循环也经常使用,两者使用都是大同小异,for循环的使用相对于while循环更加灵活,下面我们一起来了解下具体区别. 一.for 循环 ...

  4. [学习笔记] Blender 常用工具栏,选择及游标

    Shift + A 创建物体 选择工具: 默认是框选 shift 鼠标左键 加选, 再次可减选 游标 默认情况下游标在世界中心.创建新物体时,会自动被创建在游标的位置.可以随意改变游标的位置,便于建模 ...

  5. 第一周--------Java的特性和优势

    --------我认可的1.跨平台性:   Java 的int 永远是32位,不像C++可能是16.,32 可能是根据编译器厂商规定的变化.这样的话,程序的移植就会变得困难2.安全性    Java ...

  6. Layui 上传图片到磁盘上 + Tomcat 配置虚拟路径

    Layui 上传图片到磁盘上 + Tomcat 配置虚拟路径 Tomcat 配置虚拟路径 找到 eclipse 中 tomcat 下面的 server.xml 文件,在 Host 标签里面添加 < ...

  7. sql query skill

    https://www.w3resource.com/sqlite/sqlite-select-query-statement.php /* SELECT ChipID FROM "tb_X ...

  8. 剑指offer36:两个链表的第一个公共结点

    1 题目描述 输入两个链表,找出它们的第一个公共结点. 2 思路和方法 方法一: 用两个指针同时从两个链表的表头开始走,当走到自己的链表结尾的时候开始从另一个链表的表头开始向后走.终止条件就是两个指针 ...

  9. python — 索引与pymysql模块

    1. 索引 1.1 索引原理 1.什么是索引 ?-- 目录 索引就是建立起的一个在存储表阶段就有的一个存储结构,能在查询的时候加速. 2.索引的重要性: 读写比例 为 10:1,所有读(查询)的速度就 ...

  10. Mac机安装RedisCluster

    版本信息 mac版本:10.14.5 redis版本:5.0.7 Step 1 : 安装redis-cli命令 安装redis-cli命令方法有N种,这里只列举一种,参考地址:<在 Mac 上搭 ...