"is-a" means to create a subclass, which is a more specific type of the superclass.
For example, a Manager is a specific type of Employee. An Employee is a specific type of Object.
Inheritance guarantees that whatever behavior is in Employee will be present in Manager.
If code works with a class, it will work with the class's subclass.
Consider the following snippet of code:
Employee emp; emp = new Employee(); emp.setName("Mary"); String name = emp.getName();
A Manager object can be assigned to an Employee variable
Employee emp; emp = new Manager(); emp.setName("Mary"); String name = emp.getName();
All of the following assignments are allowed and they are all examples of upcasting:
Object obj; Employee emp; Manager mgr; PartTimeManager ptm; // An employee is always an object obj = emp; // A manager is always an employee emp = mgr; // A part-time manager is always a manager mgr = ptm; // A part-time manager is always an employee emp = ptm; // A part-time manager is always an object obj = ptm;
class Employee { private String name = "Unknown"; public void setName(String name) { this.name = name; }/*from w ww.jav a 2 s .c o m*/ public String getName() { return name; } } class Manager extends Employee { } class EmpUtil { public static void printName(Employee emp) { // Get the name of employee String name = emp.getName(); // Print employee name System.out.println(name); } } public class Main { public static void main(String[] args) { Employee emp = new Employee(); emp.setName("Mary"); Manager mgr = new Manager(); mgr.setName("Tom"); // Inheritance of setName() at work // Print names EmpUtil.printName(emp); EmpUtil.printName(mgr); // Upcasting at work } }
The following type of assignment is always allowed:
Object obj = new AnyJavaClass(); // Upcasting
not every employee is a manager (downcasting).
During downcasting, add a casting.
mgr = (Manager)emp; // OK. Downcast at work