Java 使用接口类型实例化实现接口的类对象

Java 使用接口类型实例化实现接口的类对象,java,Java,将接口用作实例化类对象的类型会带来一些混淆。为什么我们需要接口作为一种类型?我们什么时候可以用这个类来代替?因为类实现了接口。我知道你不能实例化一个接口 非常感谢您的建议 public interface SortRecords { int query(int rowId); } public class OurPrice implements SortRecords { @Override public int query

将接口用作实例化类对象的类型会带来一些混淆。为什么我们需要接口作为一种类型?我们什么时候可以用这个类来代替?因为类实现了接口。我知道你不能实例化一个接口

非常感谢您的建议

   public interface SortRecords {
        int query(int rowId);
    }

    public class OurPrice implements SortRecords {
        @Override
        public int query(int rowId) {
            return 0;
        }
    }

    public void test() {
        /* 
         * Why has the interface as the type? 
         */
        SortRecords sorterV1 = new OurPrice();
        sorterV1.query(1);

        /* 
         * Why not just do like this? 
         */
        OurPrice sorterV2 = new OurPrice();
        sorterV2.query(2);
    }

接口声明了契约,并允许您自由指定提供相同契约的任何其他类。因此,引用接口的代码与您提供的实现无关


在上面的例子中,它不是特别有用。然而,在更广泛的上下文中,工厂可以为您提供它喜欢的任何实现(甚至在运行时变化)。作为消费者,你不必担心。您只需使用接口及其提供的契约(方法)进行通信。

接口声明契约,并允许您自由指定提供相同契约的任何其他类。因此,引用接口的代码与您提供的实现无关


在上面的例子中,它不是特别有用。然而,在更广泛的上下文中,工厂可以为您提供它喜欢的任何实现(甚至在运行时变化)。作为消费者,你不必担心。您只需使用它提供的接口和契约(方法)进行通信。

多态性基础


请阅读这里的多态性基础知识


阅读此处

如果存在另一个
实现
SortRecords
,例如:
公共类他们的价格实现SortRecords{…}
?如果存在另一个
实现
SortRecords
,例如:
公共类他们的价格实现SortRecords{…},该怎么办请考虑将链接源的相关部分添加到您的答案中,因为链接可能会死亡,对其他用户无效。请考虑将链接源的相关部分添加到您的答案中,因为链接可能会死亡,并且对其他用户变得无用。