带有方法调用的 Java 转换

标签 java

假设我有以下类(class)

class A{
    public method(A a) {
        System.out.println(3);
    }
}

class B extends A{
  public void method (A a) {
        System.out.println(2);
  }
  public void method (B b) {
        System.out.println(1);
  }
}

A obj = new B();
obj.method( (B) obj);
((B) obj).method( (B) obj);

第一个方法调用打印出 2,而第二个方法调用打印出 1。为什么两个方法调用都不打印出 1?

最佳答案

B 的

void method (B b) 对于其父 A 是完全未知的。

这是合乎逻辑的,因为在obj.method((B) obj);中,obj的类型是A,在多态规则中它可以调用 void method(A a) 类 B 的版本。

class B extends A {

    // This is an overridden method visible to A
    public void method(A a) {
        System.out.println(2);
    }

    // This is an overloaded method unknown from A
    public void method(B b) {
        System.out.println(1);
    }
}

You can read this SO answer which explained Override vs. Overload.

关于带有方法调用的 Java 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15062841/

相关文章:

java - 如何制作一个 try-catch block ,该 block 不断调用对象上的方法,直到没有更多异常可捕获

java - 您可以在插件中更改标准 JMeter XML 输出吗?

java - 在 JVM 级别重新定义 Locale 的日期时间格式

java - 如何在 Android Java 中创建一个介于最小值和最大值之间的随机数,不包括介于最小值和最大值之间的一些数字?

java - Android,从任何 URL/任何文件、avi 等保存。它仅在模拟器上运行,不在 Samsung GalaxyS3 上运行

java - 二维整数数组,随机填充 1 和 0。我该如何做到总有办法从一个角落走到另一个角落?

java - 运行主类时出现 org.apache.openjpa.persistence.ArgumentException

java - 我正在使用 Java,但我的 while 语句不起作用

java - 处理复制/重复调整大小问题

java - 如何正确使用FindBugs的@CheckForNull、@Nonnull和@Nullable注解