【问题标题】:What does makes those methods calls returns those values?是什么让这些方法调用返回这些值?
【发布时间】:2019-01-29 10:01:06
【问题描述】:

我需要写出这些方法调用的输出。

我的回答是:

I i = new A();
i.m(b); 

我的回答:m_IB,因为 没有任何具有 B 类型的方法,所以我去了 class A,它实现了 我。 A 也没有任何带有参数 B 的方法,但它扩展了 I.IImpl,它有一个带有 m(B b) 的方法,可以打印m_IB。

I j = new B();
j.m(b); 

我的回答:m_BB 因为再次没有任何 B 类型的方法,所以我去了 B 类 因为 I j = new B(),它有一个打印 m_BB 的 m(B b)。

interface I {
  public void m(A a);
    class IImpl {
        public static void m(B b) { System.out.println("m_IB"); }
  }
}
class A extends I.IImpl implements I {
    public void m(A a) { System.out.println("m_AA"); }
}
class B extends A {
    public void m(A a) {
        super.m(a);
        System.out.println("m_BA");
    }
    public static void m(B b) { System.out.println("m_BB"); }
}
public class Interfac {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();

        a.m(b); System.out.println(); // m_IB

        I i = new A();
        i.m(b); System.out.println(); // m_AA
        I j = new B();j.m(b); // m_AA m_BA
    }
}

我的两个答案都是错误的,正确的输出是 i 的 m_AA 和 j 的 m_AA m_BA。 即使我调用 B 类型的方法,我也不明白为什么会得到这个输出。 两个正确答案都是调用 m(A a) 方法。

【问题讨论】:

  • 你怎么看 super.m(a);有吗?
  • 面试题?
  • @Stultuske 我知道 super.m(a) 做了什么,但我的问题是我不知道我实际上调用的是接口提供的方法而不是重载的方法。
  • @CommonMan 不!它来自 Java 编程考试!

标签: java inheritance interface


【解决方案1】:

你的接口提供了这个方法:

public void m(A a);

您的j 声明如下:

I j = new B();

所以,是的,它是B 的一个实例,但它被声明为I,也就是说,当您调用该方法时,它调用的是接口提供的方法,而不是重载的方法。

所以,在B 类中,它采用接口提供的方法:

public void m(A a) { // this one
        super.m(a);
        System.out.println("m_BA");
    }

    // not this overloaded one
    public static void m(B b) { System.out.println("m_BB"); }

该方法的第一行是:

super.m(a);

调用A 类中的m(a) 方法,然后打印:“m_AA”。 然后,它打印“m_BA”

【讨论】:

  • 完美,最后我的问题是通过阅读理论我不明白当我调用该方法时,它调用的是接口提供的方法,而不是重载的方法。非常感谢!
  • @NoProg 如果你想要类提供的那个,你必须将 j 声明为:B j = new B();,这样就可以了
  • @NoProg 如果这回答了您的问题,您能否将问题标记为已解决?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2011-02-17
相关资源
最近更新 更多