高手进---几个小问题!!!
/*一个员工类Employee,一个经理类Manager*/
class Test
{
public static void main(String[] args)
{
Employee[] staff=new Employee(3);
boss=new manager();
staff[0]=boss;
staff[0].getsalary();
staff[0].setBonus();
...
}
}
class Employee
{
double getsalary()
{
...
}
}
class Manager extends Employee
{
double getsalary()
{
...
} /*重定义getsalary()*/
double setBonous()
{
...
} /*新增加的函数*/
}
我想问的是:1。为什么staff[0].setBonus()不能执行?
而staff[0].getsalary()可以重载!
2。所谓超(父)类的对象变量指向子类对象,是不是仅指向从超类中继承下来 的那一部分?
3。重载后的方法属于超类还是子类?
问题点数:50、回复次数:3Top
1 楼pleonheart(只睡六小时)回复于 2004-09-04 12:28:50 得分 1
Employee[] staff = new Employee[3];Top
2 楼whbxm2000(学星,向星,摘星,披星)回复于 2004-09-04 12:32:22 得分 1
报什么错误。。。。
1。为什么staff[0].setBonus()不能执行?
而staff[0].getsalary()可以重载!
应该可以执行,报什么错误。。。。?
2。所谓超(父)类的对象变量指向子类对象,是不是仅指向从超类中继承下来 的那一部分?
不是。
3。重载后的方法属于超类还是子类?
这就是RTTI(run time type identification)
Top
3 楼JeromeLiu(烛光)回复于 2004-09-04 12:50:30 得分 48
1。为什么staff[0].setBonus()不能执行?
而staff[0].getsalary()可以重载!
应该可以执行,报什么错误。。。。?
--
不能够编译的,子类向上转型到父类后,实例可以调用父类本身的方法(如果有子类覆盖了该方法,则自动调用子类的方法,就是staff[0].getsalary()可以执行的原因),但是不能够调用子类非override的方法(如staff[0].setBonus())
2。所谓超(父)类的对象变量指向子类对象,是不是仅指向从超类中继承下来 的那一部分?
--
应该是被子类覆盖的方法加上没有被覆盖的父类的方法。
3。重载后的方法属于超类还是子类?
--
重载后的方法属于子类,但是当该子类实例转换成它的父类时,该实例调用的将是子类的方法。这样也就有了“多态”--父类调用子类的方法。Top




