List <t>是否被视为对象,集合或其他任何东西 - Java

时间:2017-07-19 16:10:58

标签: java

我有一个包含这四种方法的B类:

public class B {

public void f(int x) {
    System.out.println("1");
}

public void f(Object x) {
    System.out.println("2");
}

public void f(List x) {
    System.out.println("3");
}
public void f(Collection x){
    System.out.println("4");
}

在主要内容中我有这些命令:

B o = new B();
    Integer n = new Integer(3);
    List<Integer> l = new ArrayList<>();
    Collection<Integer> m = new ArrayList<>();
    o.f(3);
    o.f(n);
    o.f(l);
    o.f(m);

结果将是:
1
2
3
4个

为什么“3”被认为是int而Integer(3)被称为Object? 为什么列表或集合不被视为对象?

2 个答案:

答案 0 :(得分:5)

它在编译时选择了最具体的方法版本。

Object被视为Object,因为 Object(它继承自Collection):

https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

如果您没有更具体的方法版本,

ListObject也会被视为Collection

但是,由于您还重载了List和{{1}}的方法,因此会使用这些方法。

答案 1 :(得分:0)

这里有两个问题,我只看一下List,Collection,Object,因为Integer int在别处被回答。

使用最指定的方法。

所以List继承自Collection,它们都是Object。这使List更具体,因此当您传递List时,它会选择将List作为参数的方法。即使列表可以传递给Object或Collection方法。你可以通过演员表达到同样的效果。

Code    Counts1    Counts2   TotalCounts
1       10         20        30
4       15         18        33
5       5          14        19
...     ...        ...       ...

将导致2​​。