我有一个抽象的基本测试类和一个接口。在测试类内部,声明了一个接口类型的私有字段。
abstract class FibonacciTest {
*private FibonacciImplementation fibonacciImplementation;*
public FibonacciImplementation getImplementation(){
return this.fibonacciImplementation;
}
protected void setImplementation(FibonacciImplementation fibimplem){
this.fibonacciImplementation = fibimplem;
}
abstract void createFibonacciImplementation();
@BeforeEach
void createImplementation(){
createFibonacciImplementation();
}
@Test
void invalidPosition(){
assertEquals(new BigInteger("-2"),
fibonacciImplementation.calculateFib(-2));
}界面为:
public interface FibonacciImplementation {
BigInteger calculateFib(int position);
}基本测试类的子测试类如下所示:
public class RecursiveFibonacciTest extends FibonacciTest{
@BeforeEach
void createFibonacciImplementation(){
fibonacciImplementation = new RecursiveFibonacciImplementation();* error is here
}
}recursivefibonacciImplentation是这样的:
public class RecursiveFibonacciImplementation implements FibonacciImplementation {
@Override
public BigInteger calculateFib(int position) {
if(position < 0 )
return new BigInteger("" + position);
if(position == 1 || position == 0)
return new BigInteger("1");
return calculateFib(position-1).add(calculateFib(position-2));
}
}我遇到的问题是,在子测试类中,编译器抱怨我试图访问私有字段。private FibonacciImplementation fibonacciImplementation;字段。如何删除该错误。如何访问fibonacciImplementation?fibonacciImplementation has private access in FibonacciTest说,getter和setter似乎不是work.The编译器。
请注意,要求是它必须是一个私有字段。
发布于 2018-10-25 03:29:19
你真的需要一个字段吗?如果实现类的实例的创建成本不高,那么您可以仅在需要时获取实例,而不需要将其存储在字段中。
abstract class FibonacciTest {
abstract FibonacciImplementation createFibonacciImplementation();
@Test
void invalidPosition(){
assertEquals(new BigInteger("-2"),
createFibonacciImplementation().calculateFib(-2));
}
}
public class RecursiveFibonacciTest extends FibonacciTest{
@Override
FibonacciImplementation createFibonacciImplementation(){
return new RecursiveFibonacciImplementation();
}
}发布于 2018-10-25 03:25:30
private意味着只能从同一个类中访问它。如果您希望某个字段仅可由子类访问,则需要将其标记为protected。
更改此设置:
private FibonacciImplementation fibonacciImplementation;要这样做:
protected FibonacciImplementation fibonacciImplementation;在FibonacciTest类中。
https://stackoverflow.com/questions/52976509
复制相似问题