java多态
内含foreach,多态概念,向上 转型
package 第十二次作业;
//◆请阅读下面的代码并思考,雇员和经理两个类的关联以及如何用向上转型实现多态性的。
//雇员类,父类
import java.util.Date;
import java.util.GregorianCalendar;
public class Employee
{
private String name;
private double salary;
private Date hireDay;
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public Date getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}
}
//经理类,子类
class Manager extends Employee
{
private double bonus;
/**
* @param n the employee's name
* @param s the salary
* @param year the hire year
* @param month the hire month
* @param day the hire day
*/
public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day);
bonus = 0;
}
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
public void setBonus(double b)
{
bonus = b;
}
}
//测试运行类
class ManagerTest
{
public static void main(String[] args)
{
Manager boss = new Manager(“Carl Cracker”, 80000, 1987, 12, 15);
boss.setBonus(5000);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff[2] = new Employee("Tommy Tester", 40000, 1990, 3, 15);
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());
}
}
//小结(含心得体会和编程技巧):
/*心得:雇员类里有日期,名字,工资三个私有变量,用get()方法得到,有raisesalary()方法
- 其中构造方法的继承可以学习:父类的构造方法,子类调用时用子类的名字然后变量一样就调用了
- 代码用了数组来储存所有员工,再用foreach方法把所有的成员遍历,使代码更简洁
- 何为foreach:for(容器中元素类型(//一般为object) 临时变量:容器中的变量(//遍历的目标:如这里的数组,也可以是集合) ){
- }*/
/*何为多态:不同类的对象在调用同一个方法时所呈现出的多种不同的行为(多态性是由类的继承,方法重写以及父类引用指向子类对象体现的) - 定义一个抽象父类,写一个抽象方法,方法里面没有具体的代码,它的子类重写这个方法时,可以填加不同的代码,这就是多态
- 何为对象的类型转换:
- 向上转换:父类类型 变量=new 子类类型();将子类对象当做父类使用,不需要任何显示声明,但不能用父类变量去调用子类特有的方法
- 向下转换(需要强制转换): 子类类型 变量=new (子类类型)父类类型;将父类对象当做子类使用,需要声明 */