example one
public class OverrideDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
show(new Cat());
show(new Dog());
Animal a = new Cat();
a.eat();
Cat c = (Cat)a;//transition down,,downcasting
c.work();
}
public static void show(Animal a){
a.eat();
if(a instanceof Cat){
Cat c = (Cat) a;
c.work();
}else if(a instanceof Dog){
Dog c = (Dog) a;
c.work();
}
}
}
abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
//override
public void eat(){
System.out.println("eat fish");
}
public void work(){
System.out.println("Cathching the mouse");
}
}
class Dog extends Animal{
//@override
public void eat(){
System.out.println("eat bone");
}
public void work(){
System.out.println("guarding the house");
}
}
多态就是同一个接口,使用不同的实例而执行不同操作。
多态性是对象多种表现形式的体现。
public class JavaDemo {
/**
* @param args
*/
//来自廖雪峰官方网站
public static void main(String[] args) {
// TODO Auto-generated method stub
Income[] incomes = new Income[]{
new Income(1000),
new Salary(6000),
new Lottery(100000)
};
System.out.println(totalTax(incomes));
}
public static double totalTax(Income... incomes){
double total = 0;
for(Income income : incomes){
total += income.getTax();
}
return total;
}
}
class Income{
protected double income;
public Income(double income){
this.income = income;
}
public double getTax(){
return income * 0.1;
}
}
class Salary extends Income{
//struction method
public Salary(double income){
super(income);
}
//@override
public double getTax(){
if(income <= 5000){
return 0;
}
return (income - 5000) * 0.2;
}
}
class Lottery extends Income{
public Lottery(double income){
super(income);
}
//@override
public double getTax(){
return income * 0.4;
}
}