2020-12-11

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 (子类类型)父类类型;将父类对象当做子类使用,需要声明 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值