我定义类变量映射
private Map<Double, Integer> map = new TreeMap<>((o1, o2)->-o1.compareTo(o2));
但是当我不能在类方法中调用它的方法时
private void inOrder(BalancedBinaryTree.TreeNode root, double target, int k){
...
map.pollFirstEntry();
...
}
但是当我将其修复为
private TreeMap<Double, Integer> map = new TreeMap<>((o1, o2)->-o1.compareTo(o2));
现在我可以调用TreeMap的方法了,为什么呢?为什么在这种情况下多态性会丢失?
最佳答案
您正在使用Map实现定义类型为TreeMap的变量。在这种情况下,您将只能调用Map中定义的方法。在第二种情况下,您将定义TreeMap变量,以便可以调用您提到的所有其他方法。
如果在第一种情况下,您将转换为TreeMap,则也可以调用该方法。
像这样:
import java.util.Map;
import java.util.TreeMap;
public class TreeMapCheck {
static Map<Integer, Double> map = new TreeMap<>();
static TreeMap<Integer,Double> treeMap = new TreeMap<>();
public static void main(String[] args) {
((TreeMap)map).pollFirstEntry();
}
}
如果实现的方式与您期望的方式不同,则这种方法将失败,因此可以防止自己检查给定实例是否为TreeMap,如下所示:
public static void main(String[] args) {
((TreeMap)map).pollFirstEntry();
if (map instanceof TreeMap) {
((TreeMap)map).pollFirstEntry();
}
}
关于java - 我对Java中的多态性有疑问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61337234/