如何从另一个类修改方法

时间:2016-11-04 23:09:51

标签: java class methods override final

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

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

方法getValue()总是返回 3 ,然后我有另一个名为B的类,我需要实现一些东西才能访问该方法getValue()课程中A,但我需要返回 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
        );
    }
}

我试图覆盖该方法,但实际上我不知道如何得到我想要的东西。评论中的任何问题。

2 个答案:

答案 0 :(得分:2)

您无法覆盖该方法,因为它是final。如果不是public static A getValueA() { return new A() { // Will not work with getValue marked final @Override public int getValue() { return 4; } }; } ,你可以这样做:

B

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

答案 1 :(得分:0)

仔细看看你正在做什么:你给了B类一个工厂方法来创建一个新的A类实例。但这并没有改变方法getValue()的实现。

试试这个:

从A类中的方法getValue()中删除最终修饰符。

然后让B类扩展/继承A类。

public class B extends A {
  @Override
  public int getValue() {
    return 4;
  }
}

希望这会有所帮助...... =)

祝你好运

亚历