Lesson 7: Inheritance
Possibly the most important and the most difficult to understand concept that we use is that of inheritance.
What is Inheritance?
Inheritance, at its core, is a convoluted way of reusing code.
Different objects often have many similar characteristics between them - for instance, both a House
and a Skyscraper
have floors
, walls
, doors
, paint
... the list goes on and on. If we're programming a construction simulator, it makes no sense to treat House
s and Skyscraper
s as completely separate classes. Imagine a Venn diagram between the characteristics of a House
and a Skyscraper
- all the overlapping content, you'd have to write (and maintain!) twice. If you did that for everything in your construction simulator, your codebase would quickly become nothing but redundant code.
But inheritance lets us sidestep those redundencies, and only write what's overlapping once, no matter the number of classes using it.
There's a keyword called abstract
in there. Essentially what it does is force subclasses (your House
s and Skyscraper
s) to write their own floors
variable. When used on the Building
class, it means you can't take an instance of the Building
- you have to extend Building
.
The extends
keyword specifies a class to inherit member variables and methods from. This can be an abstract
class or a regular class. The way fields and member variables are inherited is very similar to if you copied and pasted the content of the inherited class into the new class, and it's useful to think of it as such.
Say we take instances of House
and Skyscraper
. Not only can we call new methods defined in their respective classes, but we can call the methods that were unchanged from their superclass.
Right now, the Skyscraper
class has overridden the getWalls
method. Instead of returning the walls
variable, it returns one less. Before the method, the author prepended it with @Override
(a JavaDoc convention). This isn't strictly needed to compile, but it is a nice way to keep track of / let others know that you're overriding a superclass method. If the original getWalls
method from Building
is needed, it can still be accessed with super.getWalls
. super
refers to the superclass
(Building
, in this case) of the class it is called in.
Conclusion
This just about wraps up our Java lessons. At this point, it's time to move on and start writing robot code - or, if you'd like, you can read the next and final section on advanced Java functionality (which includes new variable types, like the enum
used above).
Before starting the Robot Programming curriculum, take some time to read Lesson 0 - which should help you map your conceptual understanding of Java to the structure of our robot code, and the structure of our robot code to its physical hardware and electronics.
Congratulations on making it through the Java tutorials!
Last updated