我知道我可以传递一个接口(interface)
作为参数。因为我们无法从接口(interface)
创建对象!我可以从类
创建一个扩展
这个接口(interface)
的对象吗,然后我在使用这个接口(interface)<的地方使用这个对象
作为参数?
我的问题是,由于 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 {
}
最佳答案
是的,你可以做到。
接口(interface)是 Java 中避免多重继承的一种方式,即声明类 Foo
来扩展类 Bar
并实现接口(interface) Bar
意味着我们Foo
和 Bar
/Baz
之间存在“is a”关系。因此,“Foo
is a Bar
”和“Foo
is a Baz
”是正确的,或者在您的情况下 Final
是一个 One
。因此,如果类型是子类型(或者在 Java 中实现接口(interface)),则可以使用子类型来代替类型或接口(interface)(请参阅里氏替换原则)。
当您声明方法 m1(One one)
时,您要求第一个参数的类型为 One
,并且 Final
是One
这显然是正确的。
请注意,即使您传入 Final
类型的对象,该方法也只能“看到”该对象的接口(interface)部分,而不会对其进行强制转换。
关于java - 当我从扩展特定接口(interface)的类创建对象时,我可以在使用该接口(interface)的地方使用该对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61238148/