如果我们在Java中重写了方法,那么第一个调用哪个方法?

如果我们在Java中重写了方法,那么第一个调用哪个方法?,java,Java,我知道,如果我们在Java中重写了方法,那么第一个被调用的方法就是重写方法。在本例中,我初始化了Dog对象,并调用了f方法,该方法中有一个字符串。类番茄扩展类食品。但为什么在这种情况下,我得到的答案是null,而它的末尾应该是番茄名和blee public class Animal { String name; public void f(Food t) { System.out.println(t.name); } } public class Do

我知道,如果我们在Java中重写了方法,那么第一个被调用的方法就是重写方法。在本例中,我初始化了
Dog
对象,并调用了
f
方法,该方法中有一个字符串。类
番茄
扩展类
食品
。但为什么在这种情况下,我得到的答案是
null
,而它的末尾应该是番茄名和blee

public class Animal {
    String name;

    public void f(Food t) {
        System.out.println(t.name);
    }
}

public class Dog extends Animal {
    String name;

    public void f(Tomato t) {
        System.out.println(t.name + "blee");
    }
}
这是呼叫:

西红柿是食物的一个子类

Tomato t = new Tomato();
    t.name = "jdfjkgdlkg";


    Animal amor = new Dog();

    amor.f(t);

重写的方法具有等于签名

这个

还有这个

public void f(Tomato t)
有不同的方法

若你们想重写这个方法,你们应该在Dog类中编写它

public void f(Food t) {

    System.out.println(t.name + "blee");
}

您没有覆盖
Dog
中的
f
;方法中的参数类型必须相同。我们还没有看到对
f
的调用是如何编写的,这在这里很重要。您还在
Dog
中跟踪
Animal.name
,这就是为什么会得到
null
。我添加了额外的代码。。我真的不明白,如果我在dog对象上调用函数f,然后作为参数传递给tomato,怎么可能调用动物对象而不是dog?(你不应该在java代码周围放置javascript片段标记,它们不起作用,只是把你的答案弄得乱七八糟)我应该将java代码粘贴到“代码示例”中@SnakeDocno,只需在你的样本前面用后面的勾号或4个空格。原始Java代码无法在浏览器中运行,因此代码段标记没有任何用处。我已经读过,您可以使用子类参数,但它仍然是重写方法
public void f(Food t) {

    System.out.println(t.name + "blee");
}