Java调用被子类重写的方法


  • 在访问权限允许的情况下,子类可以调用父类的方法,这是因为子类继承父类就会获得父类的定义的成员不变量和方法;但父类却不能调用子类的方法,因为父类无法知道会被什么子类所继承,它的子类会增加哪些方法。
  • 有一种情况例外,当父类的方法被子类重写后,父类表面上调用自己的类里的方法,但随着方法的动态调用,实际上调用了子类重写后的方法。

如下:

class Base {private String a;public Base() {a = getA();}public String getA() {return "Base";}@Overridepublic String toString() {return a;}}public class Test extends Base{String name;int age;public Test(String name, int age) {this.name = name;this.age = age;}public String getA() {return "Test [name=" + name + ", age=" + age + "]";}public static void main(String[] args) {System.out.println(new Test("小明", 20));}}

输出:

Test [name=null, age=0]

解析:

  • 我们对这个执行过程进行一下分析,首先从mian方法开始,当通过new关键字创建以子类Test的实例对象时,在构造方法里对其进行初始化时,首先默认会调用父类的无参构造方法,但在父类的构造方法里却调用了一个父类方法,但同时在子类里也被重写了,所以就会动态调用子类重写后的方法,但这时,子类的成员变量还未被初始化,所以就会输出该类型的默认值。

Thanks

Java调用被子类重写的方法相关推荐

  1. java父类调用被子类重写的方法

    [转][原文]  1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象,调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解jav ...

  2. Java中关于子类重写父类方法的坑

    什么是方法重写? 设类B继承自类A.在A中定义方法了method_A,在B中定义方法了method_B.若method_B的签名等价于method_A的签名,则称B重写了A的method_A方法. 方 ...

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

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

  4. 子类重写父类方法,调用时会调用子类重写之后的方法

    1, 以下代码执行的结果显示是多少( )? public class Demo {class Super{ int flag=1;Super(){test();}void test(){System. ...

  5. 关于子类重写父类方法的问题

    关于访问修饰符对重写父类方法的影响 结论 代码样例 子类 结论 子类重写父类的方法: 1.父类中私有方法不能被重写.因为父类私有方法子类可理解为被子类继承,但是不被子类可见,不可访问,当然就无法重写了 ...

  6. 【Java基础】通过子类调用父类被重写的方法

    多态 使用super关键字可以通过子类调用父类被重写方法. public class Main {public static void main(String[] args) {Children c ...

  7. 特定构造方法 如何让子类重写某些方法时提醒调用super

    Designated initializer : 特定构造方法(方法声明后面带有NS_DESIGNATED_INITIALIZER)注意:子类如果重写了父类的特定构造方法, 那么必须使用super调用 ...

  8. java继承 子类重写父类方法

    package com.addd;//多态 public class Sld {private String name = "zhangsan";public Sld() {aaa ...

  9. java——API—— Object类——重写equals方法

    重写Object类的equals方法 如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法. Object类的equals方法,默认比较的是两个 ...

最新文章

  1. shell脚本中的case语句使用要点
  2. MyBatis源码骨架分析
  3. 学习 Message(4): 通过 Application.OnMessage 或 TApplicationEvents 响应消息
  4. 河北单招计算机英语,2019年河北高职单招英语联考试题
  5. 京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践
  6. MySQL SELECT:数据表查询语句
  7. 计算机视觉农作物检测,基于计算机视觉的农作物病害检测系统的研究
  8. 学了python能干啥举例-第9p,Python是什么?学了Python能干什么?
  9. Codeforces Round #379 (Div. 2) E. Anton and Tree —— 缩点 + 树上最长路
  10. 串行加法器和并行加法器_N位并行加法器(4位二进制加法器和减法器)
  11. 电阻触摸屏和电容触摸屏你更喜欢哪一个?
  12. matlab图片数据库读取,MATLAB无法读取图像数据库问题
  13. Python爬虫从入门到精通——爬虫基础:HTTP基本原理
  14. synchronized加锁过程
  15. 【考研英语语法】一般将来时练习题
  16. 回溯法——最大团问题c
  17. 复制字符串中的元音字母
  18. vue3 动态获取屏幕尺寸
  19. 德州大学奥斯汀分校计算机科学排名,德州大学奥斯汀分校专业排名一览及最强专业推荐(QS世界大学排名)...
  20. [渝粤教育] 南京信息职业技术学院 模拟电子技术 参考 资料

热门文章

  1. Java以毫秒为单位返回秒表记录的流逝时间(即求一个程序段的运行时间)
  2. 手写经典游戏 - FlappyBird
  3. Web前端是什么?主要是干什么的
  4. python与金融量化_day33 Python与金融量化分析(三)
  5. PS保留渐变进行换色
  6. vulnhub靶机-DC7-Writeup
  7. android苹果蓝牙版本,苹果蓝牙和安卓蓝牙能连吗
  8. Lambda表达式到底是什么?——简单了解Lambda表达式
  9. 不同架构cpu上的c语言编译器,关于c ++:检测CPU架构的编译时
  10. Apache Dubbo(概念篇)