为了账号安全,请及时绑定邮箱和手机立即绑定

方法重写在子类中输错了签名会怎样?

方法重写在子类中输错了签名会怎样?

超凶的233 2017-08-17 17:12:08
package demo; public class Main { public static void main(String[] args) { Object circle1 = new Circle(); Object circle2 = new Circle(); System.out.println(circle1.equals(circle2)); } } class Circle{ double radius; public boolean equals(Circle circle) { return this.radius == circle.radius; } }输出为false,就算输错了也可以当做方法重载啊,我用debug来看,根本就没有进入equals怎么回事?
查看完整描述

3 回答

已采纳
?
xixiyingyi

TA贡献18条经验 获得超19个赞

hi,Java里面object的equals方法参数是(object obj)哦,你重写的equals(xxxx),参数和父类object不一样呢,所以其实你并没有重写equals方法,你只是在自定义类里面新增了一个看似很像重写object的equals方法的方法。你在main方法里面调用的是object的equals方法,当然不会进去你自定义的'equals'方法里面了。这样说你懂了吗?

查看完整回答
1 反对 回复 2017-08-17
  • 超凶的233
    超凶的233
    噢噢,调用参数为对象的方法时,关注的是引用类型而不是实际类型。只能根据引用类型来匹配方法吗?
  • xixiyingyi
    xixiyingyi
    1、如果自定义类有继承了父类的,则调用对象的方法的时候,先去你实际创建对象的类里面找该方法(即使用 new Circle()创建的对象,就先去Circle里面找,找不到再去父类里面找,直到找不到就报错)。 2、但是如果你子类对象指向父类的引用(其实就是多态,即Object circle1 = new Circle()),这样子的话就调用不了子类新自定义的方法了。
  • 超凶的233
    超凶的233
    懂了,如果我把2个对象用Circle引用的话,就可以直接调用参数为Circle类的equals方法了,或者在调用equals方法时,把两个对象用(Circle)对象转换一下也可以
点击展开后面3
  • 3 回答
  • 1 关注
  • 1300 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信