你这是子类方法覆盖父类方法,不是调用的重载函数,所以应该为SuperA operation S
如果你把private static Super a;声明改为private static SuperA a;
这样会调用相应的重载方法,结果就会如你所愿: SuperA operation B
如果你把private static Super a;声明改为private static SuperA a;
这样会调用相应的重载方法,结果就会如你所愿: SuperA operation B
解决方案 »
- javaMail 使用时,发送时的内容怎么少了
- 基础部分,关于cookie
- Struts2 Annotation : 使用注释的方式如何为Action指定拦截器
- tomcat 问题!!!!急求答案
- 请问axis+tomcat + eclipse例子中写的java程序为什么没有 main()?
- crystal report 10 能否部署在weblogic9下面?
- tapestry问题,哪位兄弟进来看看...
- Eclipse怎么样才能和JBOSS配置在一起
- 紧急求救:如何限制应用程序,用http访问还是用https访问?
- 急救:Stack size too large 是什么错误?请帮忙,不甚感激
- 那位高手可以给我一个JAVA学习的一个好些的流程
- hibernate初学者弱弱的问
你这是子类方法覆盖父类方法,不是调用的重载函数,所以应该为SuperA operation S
如果你把private static Super a;声明改为private static SuperA a;
这样会调用相应的重载方法,结果就会如你所愿: SuperA operation B
调用的是是子类的public void opration(SuperA a){
System.out.println("SuperA operation A!");
}
public void opration(SuperB b){
System.out.println("SuperA operation B!");
}
public void opration(Super s){
System.out.println("SuperA operation S!");
}
这3个当中的哪个??
因为参数是SuperB,所以应该是SuperA operation B才对啊
public void opration(Super s){
System.out.println("SuperA operation S!");
}
参数SuperB被向上转型为父类的类型了;不信,你把子类中的这个方法注释掉,那么它实际调用的将是父类中的那个方法;
由于你生成的对象a=new SuperA();是由一个父类的引用类型来指向子类的对象,那么实际上它能调用的方法也就只能在父类的范围中;本来它应该执行父类中的那个方法,但是你子类中覆盖了父类的方法,所以它实际执行的将是子类中的方法,这就是多态!