有一个超类Employee,一个子类Manager,Manager多了一个设置奖金的方法。
Employee a;
a=new Employee (...);
a=new Manager(...);
a.setBonus(20000);上面的代码编译错误。
我改成下面的形式:
Manager a=new Manager(...);
a.setBonus(20000);这才能通过。这是怎么解释啊?
Employee a;
a=new Employee (...);
a=new Manager(...);
a.setBonus(20000);上面的代码编译错误。
我改成下面的形式:
Manager a=new Manager(...);
a.setBonus(20000);这才能通过。这是怎么解释啊?
((Manager)a).setBonus(2000);
父类引用可以指向子类实例,调用方法的时候先到子类中找,如子类没有去父类去找
给你个代码,自己去试试
class A{
void test(){System.out.print("fff");}
} public class sss extends A{
//把子类的 test()方法换个名字的话,就会调用 父类的test()
void test(){
System.out.print("gggg");
}
public static void main(String[] args){
A aa=new sss();
aa.test();
} }
Employee a = new Manager();
a.setBonus(20000);
这样也可以.
但是一个雇员不可能一定是经理:Employee a=new Manager(); //worry父类不能调用子类特有的方法。(ls。说的)去看看《java 核心技术I》,里面专门有一节讲这个
public void setBonus(float bonus) {
System.out.println("Employee setBonus");
}
}class Manager extends Employee {
private float bonus;
public void setBonus(float bonus) {
this.bonus=bonus;
System.out.println("Manager setBonus");
}
}public class TestSuper {
public static void main(String[] args) {
Employee e=new Manager();
e.setBonus(1000.00f);
}
}