子类和父类方法循环调用,栈溢出错误分析

1、工作中遇到了一个问题,执行抛出错误

这是一个栈溢出的错误。

分析代码,原因是,一个对话框类间接继承了java.awt.Dialog和java.awt.Component,又自己实现了show()方法,在show方法中调用了super.setVisible(true)。

Component类中setVisible(true)→show(true);→show()

show(true);其实执行的是对话框类的show方法。这样,对话框的show()→super.setVisible(true)说明:component类的setVisible()方法→show(true);→show()说明:对话的show()方法,造成循环调来调去,没玩没了快哭了。所以就发生了栈溢出的错误。

 

2、下面是自己写的一个样例,大家可以看看。

Parent类

package com.learn;

public class Parent {
 
 public void show() {
  System.out.println("Parent Class's show method");
 }

 public void setVisible(boolean flag) {
  if (flag) {
   show();
  }
  else {
   hide();
  }
 }

 public void hide() {
  System.out.println("Parent Class's hide method");
 }
}

 

Child类:

package com.learn;

public class Child extends Parent{

 @Override
 public void show() {
  System.out.println("Child Class's show method");
  super.setVisible(true);
 }
}

Main类代码:

  Parent obj = new Child();
  obj.show();

最终执行结果截图:

 

跟上面的非常类似,我不相信解释了。

关键要理解,Child继承Parent,如果他自己实现了show()方法,即使在父类中调用show(),其实执行的还是Child类中的show()。多写几个例子,慢慢琢磨,是有点难懂。

遇到的次数多了,就慢慢会记住了大笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值