java - 如何修改另一个类的方法

标签 java class methods overriding final

我有以下名为 A 的类,方法为 getValue():

public class A {
    public final int getValue() {
        return 3;
    }
}

getValue() 方法总是返回 3,然后我有另一个名为 B 的类,我需要实现一些东西以访问 A 类中的方法 getValue(),但我需要返回 4而不是 3

B 类:

public class B {
  public static A getValueA() {
    return new A();
  }
}

主类ATest:

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;

public class ATest {

    @Test
    public void testA() {
        A a = B.getValueA();
        assertEquals(
            a.getValue() == 4,
            Boolean.TRUE
        );
    }
}

我试图覆盖该方法,但我真的不知道如何获得我想要的。任何问题都可以在评论中发表。

最佳答案

您不能覆盖该方法,因为它是final。如果它不是final,您可以这样做:

public static A getValueA() {
    return new A() {
        // Will not work with getValue marked final
        @Override
        public int getValue() {
            return 4;
        }
    };
}

此方法在 B 中创建一个匿名子类,覆盖该方法,并将一个实例返回给调用者。匿名子类中的重写根据需要返回 4

关于java - 如何修改另一个类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432938/

相关文章:

java - 将值返回给java中的main方法

java - Apache POI 注释 Excel

java - 在单独的线程中处理文件写入的正确方法

java - 在 Java 中获取声明类

Java 反射性能在打包为 jar 时下降

c# - 使用另一个方法作为参数

java - 将参数传递给 Java 方法内定义的方法

java - "<groupId>org.glassfish.embedded</groupId>"存储库在哪里?

java - Thymeleaf - 包含片段的内容

java - 在Java中的不同类中使用函数,而不将其作为方法收集在类中