Reputation: 37078
**since java 5;
I know that if in the base class I write:
public Number doSomething(){
...
}
in the child class I can write something like this
@Override
public Integer doSomething(){
...
}
But I have a question.
If in base class method returns - primitive - array - or Collection.
How can I use covariant at this case?
Upvotes: 0
Views: 1330
Reputation: 280102
There's no covariance between primitives. No primitive type is a sub type of any other. So you can't do this
class Parent {
public int method() {
return 0;
}
}
class Child extends Parent {
public short method() { // compilation error
return 0;
}
}
For the same reason, corresponding array types for int
and short
also are not covariant.
With array types, it's similar to your Number
example
class Parent {
public Number[] method() {
return null;
}
}
class Child extends Parent {
public Integer[] method() {
return null;
}
}
Similarly for Collection
types
class Parent {
public Collection<String> method() {
return null;
}
}
class Child extends Parent {
public List<String> method() {
return null;
}
}
Note the generic type argument has to be compatible (no covariance in generics, except in bounded wildcards).
Upvotes: 8
Reputation: 4496
Upvotes: 0