站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于多态的一个小问题

关于多态的一个小问题

摘要: 关于多态的一个小问题


问一下,对于继承中的多态的问题,例如下面的例子:
class Emp{
private int age=0;
public int getAge(){
return age;
}
public void setAge(){
age=10;
}
}

public class Man extends Emp{
public int getAge(){
return super.getAge()*2;
}
public String getName(){
return -#34;abc-#34;;
}

public static void main(String[] args){
Emp obj=new Man();
obj.setAge();
System.out.println(-#34;getAge()=-#34;+obj.getAge());
System.out.println(-#34;getName()=-#34;+obj.getName());
}
}
Man类继承了Emp类,并且重写了getAge()方法,添加了自己的新方法getName(),那么当我用父类Emp的引用指向子类Man的对象时,在调用getAge和getName方法时,编译器到时会根据具体对象的类型来调用子类中重写了的getAge方法,但是却不会调用子类中添加的方法getName,还会报错,大概就是说父类中没有这个方法的定义。
那么我想问使用这种父类的引用指向子类的对象有什么好处,因为子类中独有的方法在这种方式下根本不能被调用,而在好多地方甚至把对象声明为接口类型,
例如java.util.set aSet=new java.util.HashSet();那么会不会出现同样的问题?


Emp obj=new Man();
父类的引用指向子类的对象,这样obj会先调用Man中的函数,而如果是Emp obj=new Emp()的话,obj调用的则是Emp中的函数。
“因为子类中独有的方法在这种方式下根本不能被调用”
如果想调用子类中新添加的方法,则必须这样Man m=new Man();


楼主应该看下设计模式
针对接口编程


那么我想问使用这种父类的引用指向子类的对象有什么好处

这个在分层开发的时候就能体现出来,当这些类需要修改的时候,调用它们的类的代码无需修改!


楼主还没有理解好什么是多态,用一句话总结一下就是-#34;一种定义,多种实现-#34;,请先弄明白虚拟函数是怎么工作的(虚拟方法表和动态邦定),再好好理解abstract class and interface的作用至于设计模式现在看还言之过早



↑返回目录
前一篇: 如何得到当前时间后一段时间
后一篇: exception问题