Engineering Full Stack Apps with Java and JavaScript
Inheritance describes the parent child relationship between two classes.
A class can get some of its characteristics from a parent class and then add more unique features of its own. For example, consider a Vehicle parent class and a child class Car. Vehicle class will have properties and functionalities common for all vehicles. Car will inherit those common properties from the Vehicle class and then add properties which are specific to a car.
In the above example, Vehicle parent class is known as base class or superclass. Car is known as derived class, Child class or subclass.
We can use the keyword extends, for a class to inherit another class or an interface to inherit another interface. We can use the implements keyword to implement an interface. You can find more details in the abstraction and interface notes.
We will define a parent class with name Parent, child class with name Child and a test class with name InheritanceExample.
class Parent { private int i; public int j; Parent(int i, int j) { this.i = i; this.j = j; } void printIJ() { System.out.println(i + " " + j); } } class Child extends Parent { Child(int i, int j) { super(i, j); this.j = 15; } } public class InheritanceExample { public static void main(String[] args) { Child c = new Child(5, 10); c.printIJ(); Parent p = new Child(5, 10); c.printIJ(); } }
Here printIJ() is an instance method of class Parent. It is inherited and become a part of Child now. So we can now invole it using a Child object as well.
Inherited fields can be accessed just like other normal fields (even using "this" keyword).
Java specification says that "A subclass does not inherit the private members of its parent class.". This means that subclass cannot access private member (using "this" keyword) from a subclass like other members.
When you create an object, it will call its super constructor and the super class object is created with all fields including private; however, only inherited fields can be accessed, from child. We can still access the private variables of the parent class using an accessible parent method like a setter or getter, but not through the "this" keyword.
Java supports single-parent, multiple-children inheritance and multilevel inheritence (Grandparent-> Parent -> Child) for classes and interfces.
Java supports multiple inheritance (multiple parents, single child) only through interfaces. This is done to avoid some confusions and errors such as diamond problem of inheritance.
Comments
Doubt session
"Could you please invite me for the next live doubts clearing session so that I need to understand inheritance better"
Nice
the above simple example program for inheritence makes easier to understand, :)