Introduction to Inheritance Overview l Inheritance ensures Reusability
Introduction to Inheritance Overview l Inheritance ensures Reusability l Example of Inheritance l What is actually Inherited? l Overloading Vs. Overriding l Preview: More on Inheritance 1
Inheritance ensures reusability l l l One of the good features of Java is reusability. That is once a class is defined, it can be used in any application where its method are required. Java further extends the notion of reusability through inheritance. If we need to write a class and if there is an existing class that almost satisfies our requirements, then we do not need to start from scratch. We fully take advantage of the existing class by writing a class that provides only the additional or modified requirements. The class we write is called an extension, child or sub-class of the existing class. The existing class is called parent, ancestor, super or base class. 2
Example of Inheritance l Consider the following Student class: class Student { private long id; private String name; private double gpa; public Student(long id, String name, double gpa) { this. id = id; this. name = name; this. gpa = gpa; } public Student() { this(999999, "No name", 0. 0); } public void change. GPA(double new. GPA) { gpa = new. GPA; } public double get. GPA() { return gpa; } public void print() { System. out. print(id+" "+name+ " "+gpa); } } 3
Example of Inheritance (Cont’d) Class Test. Student { public static void main (String[] args) { Student s 1 = new Student(); s 1. print(); Student s 2 = new Student(991234, "Al. Ghamdi Ahmed", 3. 45); s 2. change. GPA(3. 75); s 2. print(); } } l l l Now suppose we wish to write another class to represent Research Assistant is also a student but with the additional field for work load. Instead of writing another class from the scratch, we extend the Student class as follows. 4
Example of Inheritance (Cont’d) class Research. Assistant extends Student { private int work. Load; // in hours Research. Assistant(long id, String name, double gpa, int work. Load){ super(id, name, gpa); this. work. Load = work. Load; } Research. Assistant() { super(); work. Load = 0; } public void print() { super. print(); System. out. print(" " + work. Load); } } class Test. Reserch. Assistant { public static void main (String[] args) { Research. Assistant s 1 = new Research. Assistant(); s 1. print(); 5
Example of Inheritance (Cont’d) Research. Assistant s 2 = new Research. Assistant(991234, "Al. Ghamdi Ahmed", 3. 45, 15); s 2. change. GPA(3. 75); s 2. print(); } } l l The super reference can be used to refer to the parent class. Like this, it can be used in dual form – with a dot to access a member (method or field) or without dot to call a constructor. When super is used to call the parent’s constructor, it must be the first statement in the subclass’s constructor. If a subclass constructor does not explicitly call the parent’s constructor, the compiler automatically inserts a call to the parent’s default constructor. If the parent class does not have a default constructor and none of the other constructor is called, the compiler reports an error. 6
What is actually inherited? l l Non-private fields and methods of the parent class are automatically inherited by the subclass except those that are overridden by the subclass. If a method is re-defined in the subclass with the same signature as that in the parent class, it is said to override the method in the parent class. Constructors are not inherited, but they can be invoked in the subclass’s constructor as seen in the example. Giving a field in a class the same name as a field in an ancestor hides the ancestor's field. The field exists, but cannot be accessed by its simple name. If has to be called using the super keyword. 7
Overloading vs. Overriding l l Overloading deals with multiple methods in the same class with the same name but different signatures Overriding deals with two methods, one in a parent class and one in a child class, that have the same signature Overloading lets you define a similar operation in different ways for different data Overriding lets you define a similar operation in different ways for different object types 8
Another Example l The following example further illustrates the idea of inheritance: class Employee { private String name; private double salary; public Employee(String n, double s) { name = n; salary = s; } public String to. String() { return "Name: " + name + ", Salary=" + salary; } } class Manager extends Employee { private String department; public Manager(String n, double s, String d) { super(n, s); department = d; } public String to. String() { return super. to. String() + ", Department=" + department; } } 9
Another Example (cont’d) public class Problem 4 { public static void main(String[] args) { Employee e = new Employee("Ibrahim", 65000); Manager m = new Manager("Jarallah", 85000, "Engineering"); System. out. println(e); System. out. println(m); } } 10
- Slides: 10