当我通过扩展特定接口的类创建对象时,可以在使用该接口的地方使用该对象吗?

问题描述 投票:0回答:2

我知道我可以将接口作为参数传递。由于我们不能从接口创建对象!我可以从扩展此接口的类中创建一个对象,然后在将该接口用作参数的地方使用该对象吗?

我的问题,因为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 inheritance interface implements
2个回答
0
投票

是的,您可以这样做。接口是Java中避免多重继承的一种方法,即声明一个类Foo来扩展一个类Bar并实现一个接口Bar意味着我们在FooBar之间具有“是”关系/ Baz。因此,“ FooBar”和“ FooBaz”为真,或者在您的情况下,FinalOne。因此,如果类型是子类型(或在Java中实现接口),则可以使用子类型代替类型或接口(请参阅Liskov替换原理)。

当声明方法m1(One one)时,您需要第一个参数的类型为One,并且由于FinalOne,这显然是正确的。

[请注意,即使您传入类型为Final的对象,该方法也只能“看到”该对象的接口部分,而无需强制转换。


0
投票

我可以从扩展此接口的类中创建一个对象吗?>

© www.soinside.com 2019 - 2024. All rights reserved.