请查看以下代码
public class Parent {
public Object doSomething() {
return null;
}
}
class Child extends Parent {
public Integer doSomething() {
return 0;
}
}
在协方差下这是完美的并且编译得很好。
在哪里
public class Parent {
public Integer doSomething() {
return null;
}
}
class Child extends Parent {
public int doSomething() {
return 0;
}
}
不编译。但它可以很容易地在自动装箱和拆箱下改造自己吗?
答案 0 :(得分:1)
在第一种情况下代码编译因为java支持Covariance
,这意味着,
如果Cat是Animal的Subtype,那么只要Animal类型的表达式可以使用,就可以使用Cat类型的表达式。
据说第一种情况很好。
来到第二个案例,
Autoboxing
是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。
它是包装器和它的原语之间的直接关系,这并不意味着int
是Integer
的子类
int ---> Integer //conversion, not subtype