我知道我可以将接口作为参数传递。由于我们不能从接口创建对象!我可以从扩展此接口的类中创建一个对象,然后在将该接口用作参数的地方使用该对象吗?
我的问题,因为obj是Final类的对象,我可以在这里将其用作参数(m1(obj))吗?并向我解释为什么?
package aaa;
public class AAA {
public static void m1(One one) {
System.out.print("AAA");
}
public static void main(String[] args) {
Final obj = new Final();
m1(obj);
}
}
interface One {
}
class Final implements One {
}
是的,您可以这样做。接口是Java中避免多重继承的一种方法,即声明一个类Foo
来扩展一个类Bar
并实现一个接口Bar
意味着我们在Foo
和Bar
之间具有“是”关系/ Baz
。因此,“ Foo
是Bar
”和“ Foo
是Baz
”为真,或者在您的情况下,Final
是One
。因此,如果类型是子类型(或在Java中实现接口),则可以使用子类型代替类型或接口(请参阅Liskov替换原理)。
当声明方法m1(One one)
时,您需要第一个参数的类型为One
,并且由于Final
是One
,这显然是正确的。
[请注意,即使您传入类型为Final
的对象,该方法也只能“看到”该对象的接口部分,而无需强制转换。
我可以从扩展此接口的类中创建一个对象吗?>