我有一个名为A的类,以及一个名为B的类,它扩展了A.

玩一些方法来理解多态行为,我遇到了一个奇怪的情况.

public class Main {

public static void main(String[] args){

B b = new B();

A a = b;

b.f1(a);

}

}

public class A {

.

.

.

public void f1(A a){

if(a instanceof B)

f1((B)a);

else

System.out.println("Nothing");

}

.

.

.

}

public class B extends A {

.

.

.

public void f1(B b){

System.out.println("B::f1(B)");

}

.

.

.

}

我期望A类中的f1首先被调用(因为a是A类型)实际发生了.然后我预料到行f1((B)a);被称为,因为a是B的一个实例.到现在为止,一切都按预期进行.但是,我认为下一个将被调用的方法是B类中的f1(B).相反,A类中的f1(A)被反复调用,导致堆栈溢出异常.为什么不叫B级的f1(B)? B的一个实例是调用者,参数被强制转换为B类.

java子类参数传递给父类_java – 为什么调用将父类作为参数的方法调用,而不是将子类作为参数获取的方法?...相关推荐

  1. java 组合优与继承_Java中为什么老鸟要告诉你优先使用组合而不是继承?

    新的一周,新的干货分享 大家知道,面向对象有三个特征:继承.封装和多态.现在,我们谈谈关于继承的一些问题.了解一下继承的优点.缺点,以及继承缺点的解决方案. 继承的起源,来自于多个类中相同特征和行为的 ...

  2. Java中方法的继承以及父类未被子类覆盖的方法调用的问题

    在看java继承这一块的时候发现了一个问题,即父类未被子类覆盖的方法是如何调用的? 是子类拥有了父类的该方法只是没有显示表示,还是子类调用了父类的该方法. 为此做了一下验证 代码如下: public ...

  3. java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题...

    1 /* 2 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 3 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 4 ...

  4. java多态实现示例,以及子类重写父类方法调用父类方法

    多态 多态存在的三个必要条件:继承,重写,父类引用指向子类对象, 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则error:如果有,调用子类的同名方法. example: pack ...

  5. java父类引用子类属性_Java多态性详解——父类引用子类对象

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  6. java 父类获取子类对象_Java多态性详解 (父类引用子类对象)

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  7. java继承怎么老是出错_java中子类继承父类时总是出错怎么回?

    权限public > 包(package,默认,也就是什么权限修饰符都不加) > proteced > private 子类继承了父类的所有成员(这样说实际是不对的),但只能访问父类 ...

  8. java子类调用抽象父类方法_【坑】Spring中抽象父类属性注入,子类调用父类方法使用父类注入属性...

    运行环境 idea 2017.1.1 spring 3.2.9.RELEASE 需求背景 需要实现一个功能,该功能有2个场景A.B,大同小异 抽象一个抽象基类Base,实现了基本相同的方法BaseMe ...

  9. java int 传引用吗_Java的参数传递是「值传递」还是「引用传递」?

    关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题. 有人说Java中只有值传递,也有人说值传递和引用传递都是存在的,比较容易让人产生疑问. 关于值传递和引用传递其实需要分情况看待. ...

  10. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

最新文章

  1. Android中下载进度条格式,Android开发如何实现文件下载进度条
  2. OkHttpClient源码分析(五)—— ConnectInterceptor和CallServerInterceptor
  3. ccf-csp #201912-2 回收站选址
  4. Hook技术--Activity的启动过程的拦截
  5. OpenGL CPU射线行进
  6. arcgis10.2 sde配置
  7. arm java 性能怎么样,ARM v6上使用java的Number to String转换性能
  8. 【HDU - 3172】Virtual Friends(带权并查集--权为集合元素个数)
  9. 单片机声明数组可变长度c语言keil,单片机用byte定义数组keil编译警告 missing';'before...
  10. 7年前的200电话卡帐号
  11. 如何取消选中单选按钮?
  12. jar编译成exe可执行文件【图文教程】
  13. 有的人根本没法谈事情
  14. web-页面body添加背景图片
  15. MT【217】韦达定理应用
  16. From Intrusion Detection to Attacker Attribution: A Comprehensive Survey of Unsupervised Methods翻译
  17. Android开发 RFC 2136 DNS动态更新协议
  18. 奇迹mu服务器架设全教程
  19. The maximum number of tolerable server reconnection errors has been reached
  20. 形容词做状语(少见)

热门文章

  1. python九十八类_Python领域最伟大工程师Kenneth Reitz,教你写代码
  2. 四川大学锦江学院计算机专业怎么样,四川大学锦江学院怎么样?是一所什么层次的大学?...
  3. java集合框架图(二)
  4. RabbitMQ消息应答------ack机制
  5. 只调用一次_JavaScript运行机制 - 调用栈
  6. python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
  7. hive 安装_7.Hive介绍以及安装
  8. 华为鸿蒙第一期名单,机型正式确认,鸿蒙2.0第一批名单曝光!花粉:华为不够厚道...
  9. android编译.a文件,Android 7.1源码编译导入AS完整教程
  10. php使用ssh远程调用另一个服务器执行命令(python脚本)