如果对象的类型为T1,就做某件事;如果对象的类型为T2,就做另外一件事,请赏自己一个巴掌

前人的至理名言,看看之前我写的代码,应该被赏了n个巴掌了吧。
看看下面的例子:

1.被赏巴掌的例子

package com.tn.salary;

public interface Employ {
   int getSalary();
}
package com.tn.salary;

public class Manager implements Employ {

	public int getSalary() {
		return 5000;
	}

	public int getBonus() {
		return 300;
	}
}
package com.tn.salary;

public class Programmmer implements Employ {

	public int getSalary() {
		return 3000;
	}

}
package com.tn.salary;

public class Payroll {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Payroll payroll = new Payroll();
		payroll.caculatePayRoll(new Programmmer());
		payroll.caculatePayRoll(new Manager());
	}

	private int caculatePayRoll(Employ em) {
		int money = em.getSalary();
		if (em instanceof Manager) {
			money += ((Manager) em).getBonus();
		}
		System.out.println("the total money is"+money);
		return money;
	}

}

  

2.脸部保持完整的例子

package com.tn.salary.refector;

public interface Employ {
   int getSalary();
   int getBonus();
}
package com.tn.salary.refector;

public class Manager implements Employ {

	private static final int MANAGER_MONTHLY_BONUS = 300;
	private static final int MANAGER_MONTHLY_SALARY = 5000;

	public int getSalary() {
		return MANAGER_MONTHLY_SALARY;
	}

	public int getBonus() {
		return MANAGER_MONTHLY_BONUS;
	}
}
package com.tn.salary.refector;

public class Programmmer implements Employ {

	private static final int PROGRAMMER_MONTHLY_BONUS = 0;
	private static final int PROGRAMMMER_MONTHLY_SALARY = 3000;

	public int getSalary() {
		return PROGRAMMMER_MONTHLY_SALARY;
	}

	public int getBonus() {
		return PROGRAMMER_MONTHLY_BONUS;
	}

}
package com.tn.salary.refector;

public class Payroll {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Payroll payroll = new Payroll();
		payroll.caculatePayRoll(new Programmmer());
		payroll.caculatePayRoll(new Manager());
	}

	private int caculatePayRoll(Employ em) {
		int money = em.getSalary()+em.getBonus();
		System.out.println("the money is"+money);
		return money;
	}

}
原文地址:https://www.cnblogs.com/budoudou/p/2134888.html