laahaa2015 2016-07-18 12:08 采纳率: 0%
浏览 1478

java内子类的重写方法里面,使用了该方法,那么被使用的方法是父类的还是子类的呢?

java内子类的重写方法里面,使用了该方法,那么被使用的方法是父类的还是子类的呢。。

自己写了一个类来测试,结果是使用子类自己的方法;而看视频的内容好像是使用了父类的方法,并且eclipse悬停时指示的也是。两个代码如下:

自己的:

public class Test1 {
    public int changeTo99(int[] i){
        i[0] = 99;
        return i[0];
    }
    public int changeTo100(int[] i){
        i[0] = 100;
        return i[0];
    }
}

public class Test2 extends Test1{

    public int changeTo100(int[] i){
        if(i[0] == 0) i[0] = 7;
        else {
            changeTo100(i);
        }
        return i[0];
    }

    public static void main(String[] args) {
        Test2 t = new Test2();
        int[] i = {1,2,3};
        t.changeTo100(i);
        System.out.println(i[0]);
    }
}

上课看到的:

public class SList {

  private SListNode head;
  private int size;
  private SListNode tail;

//other codes
public boolean equals(Object other) {
        if (!(other instanceof SList)) { // Reject non-SLists.
            return false;
        }
        SList o = (SList) other;
        if (size != o.size) {
            return false;
        }
        SListNode n1 = head;
        SListNode n2 = o.head;
        while (n1 != null) {
            if (!n1.item.equals(n2.item)) { // Deep equality of the items.
                return false;
            }
            n1 = n1.next;
            n2 = n2.next;
        }
        return true;
    }
    }

后者使用的equals是重写了Object内的equals,然后方法内还用了一个equals,可是这个使用的equals是仍然是Object的。。。而自己写的两个Test类就不是这样,Test2中重写的changeTo100里面用的是Test2自己的。这样很奇怪啊。。。。。。求教!

  • 写回答

1条回答

  • lxh5431 2016-07-20 03:38
    关注

    有一个优先级的,先检查下父类,如果父类有这个方法,子类才会继承重写这个方法

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料