Java 为什么我们使用引用子类对象的超类类型对象

Java 为什么我们使用引用子类对象的超类类型对象,java,subclass,declaration,superclass,Java,Subclass,Declaration,Superclass,我问这个问题可能听起来很傻,或者互联网上有很多关于这个问题的参考资料。但是相信我,我找不到任何正确的答案。所以我决定问这个问题 这就是 我们为什么这样声明对象 Map m=新的HashMap() 为什么不呢? HashMap m=新的HashMap() 一般来说,为什么我们声明引用子类对象的超类类型的对象。这样,您就可以在不依赖特定类的情况下更改实现 请考虑你所做的例子,我们更倾向于使用 Map<String, String> m2 = new HashMap<>();

我问这个问题可能听起来很傻,或者互联网上有很多关于这个问题的参考资料。但是相信我,我找不到任何正确的答案。所以我决定问这个问题

这就是 我们为什么这样声明对象 Map m=新的HashMap() 为什么不呢? HashMap m=新的HashMap()


一般来说,为什么我们声明引用子类对象的超类类型的对象。

这样,您就可以在不依赖特定类的情况下更改实现

请考虑你所做的例子,我们更倾向于使用

Map<String, String> m2 = new HashMap<>();
Map m2=newhashmap();
结束

HashMap m2=newhashmap();
这让您可以自由选择另一个性能更好的实现

Map<String, String> m2 = new TreeMap<>();
Map m2=newtreemap();

我可以对这次否决投票发表意见吗?我可以对你为什么回答明显重复的问题发表意见吗?很抱歉,即使答案重复,我也不知道它有什么问题。我看到了很多重复的答案,当它们是相关的时候,它们会被提升。当我写我的答案时,我甚至不知道答案是重复的。重复的答案不应该被回答,这只是传播了知识,使维护知识变得更加困难。“我看到了很多重复的答案,当它们是相关的时候,它们会被提升。”是的,这是一个有很多用户的流程,他们不知道这个网站的目的是什么。因此,如果你觉得你的答案很重要/有帮助,那么把它贴在上面的一个链接问题上,但不要贴在这里。谢谢。啊……:)触碰
Map<String, String> m2 = new TreeMap<>();