我不明白为什么我可以返回一个实现接口的对象,但编译器在尝试将该对象存储在该类型的变量中时会抱怨。
简单的界面:
public interface ITest {
}
现在是一个实现该接口的简单类:
public class Test implements ITest {
}
好吧,我的理解是:ATest 是 ITest
现在问题是:
public class Tester {
public static void parameterTest(ITest test) {
}
public static ITest returnValueTest() {
return new Test(); // no compiler error here
}
public static void main(String[] args) {
Test test = new Test();
Tester.parameterTest(test);
test = Tester.returnValueTest(); // compiler complains here
}
}
该变量test来自类型Test,因此ITest。我可以Tester.parameterTest(ITest test)毫无怨言地把它传递给你。
但是尝试从变量中检索值Tester.returnValueTest()并将其放入变量中test会失败
Incompatible types: ITest cannot be converted to Test
尽管该方法返回一个Test编译器不会抱怨的对象。
为什么这样?为什么我可以返回一个Test对象并符合方法的返回类型ITest,但不能将这个返回的对象放入类型的变量中Test?
慕少森
繁花不似锦
相关分类