0% found this document useful (0 votes)
36 views16 pages

Review of Object-Oriented Concepts in JAVA

This document provides a review of key object-oriented concepts in Java including inheritance, abstract classes, and interfaces. It defines inheritance as a way to organize related classes in a hierarchical manner. Abstract classes are described as a way to force subclasses to implement abstract methods while interfaces provide a form of multiple inheritance by allowing classes to implement multiple interfaces. Examples are provided to illustrate how these concepts are implemented in Java code.

Uploaded by

Saad Shabbir
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views16 pages

Review of Object-Oriented Concepts in JAVA

This document provides a review of key object-oriented concepts in Java including inheritance, abstract classes, and interfaces. It defines inheritance as a way to organize related classes in a hierarchical manner. Abstract classes are described as a way to force subclasses to implement abstract methods while interfaces provide a form of multiple inheritance by allowing classes to implement multiple interfaces. Examples are provided to illustrate how these concepts are implemented in Java code.

Uploaded by

Saad Shabbir
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 16

Review of Object-Oriented Concepts in JAVA

• Object-Oriented Concepts supported by JAVA.

• Advantages of Object-Orientation.

• Inheritance.

• Abstract Classes.

• Interfaces.

• Review Questions.
Object-Oriented Concepts supported by JAVA

• Java provides explicit support for many of the fundamental Object-


Oriented Concepts. Some of these are:
– Classification: Grouping related things together. This is
supported through classes, inheritance & packages.
– Encapsulation: Representing data and the set of operations
on the data as a single entity - exactly what classes do.
– Information Hiding: An object should be in full control of its
data, granting specific access only to whom it wishes.
– Inheritance: Java allows related classes to be organized in a
hierarchical manner using the extends keyword.
– Polymorphism: Same code behaves differently at different
times during execution. This is due to dynamic binding.
Advantages of Object-Orientation.

• A number of advantages can be derived as a result of these object-


oriented features. Some of these are:
– Reusability: Rather than endlessly rewriting same piece of
code, we write it once and use it or inherit it as needed.
– Extensibility: A class can be extended without affecting its
users provided the user-interface remains the same.
– Maintainability: Again, once the user-interface does not
changed, the implementation can be changed at will.
– Security: Thanks to information hiding, a user can only access
the information he has been allowed to access.
– Abstraction: Classification and Encapsulation allow portrayal of
real-world problems in a simplified model.
Review of inheritance
• Suppose we have the following Employee class:
1 class Employee {
2 protected String name;
3 protected double payRate;
4 public Employee(String name, double payRate) {
5 this.name = name;
6 this.payRate = payRate;
7 }
8 public String getName() {
9 return name;
10 }
11 public void setPayRate(double newRate) {
12 payRate = newRate;
13 }
14 public double pay() {
15 return payRate;
16 }
17 public void print() {
18 System.out.println("Name: " + name);
19 System.out.println("Pay Rate: "+payRate);
20 }
21 }
Review of inheritance (contd.)
• Now, suppose we wish to define another class to represent a part-
time employee whose salary is paid per hour. We inherit from the
Employee class as follows:
1 class HourlyEmployee extends Employee {
2 private int hours;
4 public HourlyEmployee(String hName, double hRate) {
5 super(hName, hRate);
6 hours = 0;
7 }
9 public void addHours(int moreHours) {
10 hours += moreHours;
11 }
12 public double pay() {
13 return payRate * hours;
14 }
15 public void print() {
16 super.print();
17 System.out.println("Current hours: " + hours);
18 }
19 }
Notes about Inheritance

• We observe the following from the examples on inheritance:


• Methods and instance variables of the super class are inherited by subclasses,
thus allowing for code reuse.
• A subclass can define additional instance variables (e.g. hours) and additional
methods (e.g. addHours).
• A subclass can override some of the methods of the super class to make them
behave differently (e.g. the pay & print)
• Constructors are not inherited, but can be called using the super keyword. such
a call must be the first statement.
• If the constructor of the super class is not called, then the complier
inserts a call to the default constructor -watch out!
• super may also be used to call a method of the super class.
Review of Abstract Classes

• Inheritance enforces hierarchical organization, the benefit of which are:


reusability, type sharing and polymorphism.
• Java uses Abstract classes & Interfaces to further strenthen the idea of
inheritance.
• To see the role of abstract of classes, suppose that the pay method is not
implemented in the HourlyEmployee subclass.
• Obviously, the pay method in the Employee class will be assumed,
which will lead to wrong result.
• One solution is to remove the pay method out and put it in another
extension of the Employee class, MonthlyEmployee.
• The problem with this solution is that it does not force subclasses of
Employee class to implement the pay method.
Review of Abstract Classes (Cont'd)

• The solution is to declare the pay method of the Employee class as


abstract, thus, making the class abstract.

1 abstract class Employee {


2 protected String name;
3 protected double payRate;
4 public Employee(String empName, double empRate) {
5 name = empName;
6 payRate = empRate;
7 }
8 public String getName() {
9 return name;
10 }
11 public void setPayRate(double newRate) {
12 payRate = newRate;
13 }
14 abstract public double pay();
15 public void print() {
16 System.out.println("Name: " + name);
17 System.out.println("Pay Rate: "+payRate);
18 }
19 }
Review of Abstract Classes (Cont'd)

• The following extends the Employee abstract class to get


MonthlyEmployee class.

1 class MonthlyEmployee extends Employee {


2 public MonthlyEmployee(String empName, double empRate) {
3 super(empName, empRate);
4 }
5 public double pay() {
6 return payRate;
7 }
8 }

• The next example extends the MonthlyEmployee class to get the


Executive class.
Review of Abstract Classes (Cont'd)
1 class Executive extends MonthlyEmployee {
2 private double bonus;
3 public Executive(String exName, double exRate) {
4 super(exName, exRate);
5 bonus = 0;
6 }
7 public void awardBonus(double amount) {
8 bonus = amount;
9 }
10 public double pay() {
11 double paycheck = super.pay() + bonus;
12 bonus = 0;
13 return paycheck;
14 }
15 public void print() {
16 super.print();
17 System.out.println("Current bonus: " + bonus);
19 }
20 }
HourlyEmployee

Employee
MonthlyEmployee Executive
Review of Abstract Classes (Cont'd)

• The following further illustrates the advantages of organizing


classes using inheritance - same type, polymorphism, etc.
1 public class TestAbstractClass {
2 public static void main(String[] args) {
3 Employee[] list = new Employee[3];
4 list[0] = new Executive("Jarallah Al-Ghamdi", 50000);
5 list[1] = new HourlyEmployee("Azmat Ansari", 120);
6 list[2] = new MonthlyEmployee("Sahalu Junaidu", 9000);
7 ((Executive)list[0]).awardBonus(11000);
8 for(int i = 0; i < list.length; i++)
9 if(list[i] instanceof HourlyEmployee)
10 ((HourlyEmployee)list[i]).addHours(60);
11 for(int i = 0; i < list.length; i++) {
12 list[i].print();
13 System.out.println("Paid: " + list[i].pay());
14 System.out.println("*************************"); The Program Output
15 }
16 }
17 }
Review of Interfaces

• Interfaces are not classes, they are entirely a separate entity.


• They provide a list of abstract methods which MUST be implemented by a
class that implements the interface.
• Unlike abstract classes which may contain implementation of some of the
methods, interfaces provide NO implementation.
• Like abstract classes, the purpose of interfaces is to provide organizational
structure.
• More importantly, interfaces are here to provide a kind of "multiple
inheritance" which is not supported in Java.
• If both parents of a child implement a method, which one does the child
inherits? - Multiple inheritance confusion.
• Interfaces allow a child to be both of type A and B.
Review of Interfaces (contd.)

• Recall that Java has the Comparable interface defines as:


1 interface Comparable {
2 int compareTo(Object o);
3 }

• Recall also that java has the java.util.Arrays class, which has a sort
method that can sort any array whose contents are either primitive
values or Comparable objects.
• Thus, to sort our list of Employee objects, all we need is to modify
the Employee class to implement the Comparable interface.
• Notice that this will work even if the Employee class is extending
another class or implementing another interface.
• This modification is shown in the next page.
Review of Interfaces (contd.)

1 abstract class Employee implements Comparable {


2 protected String name;
3 protected double payRate;
4 public Employee(String empName, double empRate) {
5 name = empName;
6 payRate = empRate;
7 }
8 public String getName() {
9 return name;
10 }
11 public void setPayRate(double newRate) {
12 payRate = newRate;
13 }
14 abstract public double pay();
15 public int compareTo(Object o) {
16 Employee e = (Employee) o;
17 return name.compareTo( e.getName());
18 }
19 }
HourlyEmployee
Comparable Employee Executive
MonthlyEmployee
Review of Interfaces (contd.)

• Since Employee class implements the Comparable interface, the


array of employees can now be sorted as show below:
1 import java.util.Arrays;
2 public class TestInterface {
3 public static void main(String[] args) {
4 Employee[] list = new Employee[3];
4 list[0] = new Executive("Jarallah Al-Ghamdi", 50000);
5 list[1] = new HourlyEmployee("Azmat Ansari", 120);
6 list[2] = new MonthlyEmployee("Sahalu Junaidu", 9000);
8 ((Executive)list[0]).awardBonus(11000);
9 for(int i = 0; i < list.length; i++)
10 if(list[i] instanceof HourlyEmployee)
11 ((HourlyEmployee)list[i]).addHours(60);
12 Arrays.sort(list);
13 for(int i = 0; i < list.length; i++) {
14 list[i].print();
15 System.out.println("Paid: " + list[i].pay()); The program output
16 System.out.println("*************************");
17 }
18 }
19 }
Review Questions

• How does an interface differ from an abstract class?


• Why does Java not support multiple inheritance? What feature of
Java helps realize the benefits of multiple inheritance?
• An Abstract class must contain at least one abstract method, (true
or false)?
• A subclass typically represents a larger number of objects than its
super class, (true of false)?
• A subclass typically encapsulates less functionality that does its
super class, (true or false)?
• An instance of a class can be assigned to a variable of type any of
the interfaces the class implements, (true or false)?

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy