Generics inheritance is a teeny bit tricky because it's different from regular object inheritance, but we'll have all that cleared up in no time!
Take a look at this code.
Integer b = new Integer(); Number a = b;
It runs just fine since Integer is a subclass of Number.
Now let's try the same logic using generics.
ArrayList<Integer> intList = new ArrayList<>(); ArrayList<Object> objList = intList; // Compile time error
When we try to compile this, we get and error.
Test.java:9: error: incompatible types: ArrayList<Integer> cannot be converted to ArrayList<Object>
We would think that this would work, because
Integer is a subclass of
Object. However, it doesn't work because generics do not work like that.
ArrayList<Integer> is not subtype of
ArrayList<Object>, even though Integer is a subclass of Object. If we want to use generics on a more general level, we need to use wildcards, which are denoted by a
This a very important concept! Make sure you understand this before moving on.
Command Line Kung Fu is packed with dozens of tips and practical real-world examples. You won't find theoretical examples in this book. The examples demonstrate how to solve actual problems. The tactics are easy to find, too. Each chapter covers a specific topic and groups related tips and examples together.$ Check price
Designed for serious programmers, this reliable, unbiased, no-nonsense tutorial illuminates advanced Java language and library features with thoroughly tested code examples. As in previous editions, all code is easy to understand and displays modern best-practice solutions to the realworld challenges faced by professional developers.$ Check price