0% found this document useful (0 votes)
42 views

Abs Tact

An abstract class is a placeholder in a class hierarchy that represents a generic concept. It can contain abstract methods, which consist of only a method declaration without a method body. The child class of an abstract class must override any abstract methods. An abstract class cannot be instantiated directly. Abstract classes help establish common elements in classes that are too generic to instantiate directly.

Uploaded by

malkari_mkr
Copyright
© Attribution Non-Commercial (BY-NC)
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)
42 views

Abs Tact

An abstract class is a placeholder in a class hierarchy that represents a generic concept. It can contain abstract methods, which consist of only a method declaration without a method body. The child class of an abstract class must override any abstract methods. An abstract class cannot be instantiated directly. Abstract classes help establish common elements in classes that are too generic to instantiate directly.

Uploaded by

malkari_mkr
Copyright
© Attribution Non-Commercial (BY-NC)
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/ 32

Abstract Classes

Abstract Classes
 Java allows abstract classes
 use the modifier abstract on a class header to declare
an abstract class
abstract class Vehicle
{ … }
 An abstract class is a placeholder in a class
hierarchy that represents a generic concept

Vehicle

Car Boat Plane


2
Abstract Class: Example
 An abstract class often contains abstract
methods, though it doesn’t have to
 Abstract methods consist of only methods declarations,
without any method body

public abstract class Vehicle


{
String name;

public String getName()


{ return name; } \\ method body

abstract public void move();


\\ no body!
}
3
Abstract Classes
 An abstract class often contains abstract methods,
though it doesn’t have to
 Abstract methods consist of only methods declarations,
without any method body

 The non-abstract child of an abstract class must


override the abstract methods of the parent
 An abstract class cannot be instantiated
(why?)

 The use of abstract classes is a design decision; it


helps us establish common elements in a class that is
too general to instantiate
4
Referencing Objects
Recap: Object References
 All interaction with an object occurs
through object reference variables

 An object reference variable holds the


reference (address, the location) of an
object
ChessPiece bishop1 = new ChessPiece();

bishop1

6
Recap: Primitive Assignment
 The act of assignment takes a copy of a
value and stores it in a variable
 For primitive types:

num2 = num1;
Before After
num1 num2 num1 num2
5 12 5 5

7
Recap: Reference Assignment
 For object references, the reference is
copied:
bishop2 = bishop1;
Before After

bishop1 bishop2 bishop1 bishop2

8
Recap: Relationship Between
Objects and Object References
 Two or more references can refer to the
same object; these references are called
aliases of each other

 One object (and its data) can be accessed


using different references

9
References and Inheritance
 An object reference can refer to an object
of its class, or to an object of any class
derived from it by inheritance
 For example, if the Holiday class is used to
derive a child class called Christmas, then a
Holiday reference could actually be used to
point to a Christmas object
Holiday
Holiday day;
day = new Holiday();

Christmas
day = new Christmas();
10
References and Inheritance
 Assigning an object to an ancestor reference is
considered to be a widening conversion, and can be
performed by simple assignment
Holiday day = new Christmas();
 Assigning an ancestor object to a reference can also
be done, but it is considered to be a narrowing
conversion and must be done with a cast
Christmas c1 = new Christmas();
Holiday day = c1;
Christmas c2 = (Christmas) day;

 The widening conversion is the most useful


 for implementing polymorphism

11
Referencing and Inheritance
Recap: References and Inheritance
 An object reference variable can refer to
any object instantiated from
 itsown class, or
 any class derived from it by inheritance

 For example,
Holiday Holiday day;
day = new Holiday();

Christmas day = new Christmas();
The assignment of an object of a
derived class to a reference
variable of the base class can be
considered as a widening
conversion 13
References and Inheritance
 Through a given type of reference variable,
we can invoke only the methods defined in
that type class Holiday
{
public void celebrate()
{…}
Holiday day; }
day = new Christmas(); class Christmas extends Holiday
{
public void celebrate()
{…}
public void listenToChristmasSongs()
{…}
}

Can we do the following statements:


day.celebrate();
day.listenToChristmasSongs();
14
References and Inheritance
 We can “promote” an object back to its
original type through an explicit narrowing
cast:

Holiday day = new Christmas();


day.celebrate();

Christmas c = (Christmas) day;


c.listenToChristmasSongs();

Question: which celebrate() will be invoked by the line:


day.celebrate();
15
Polymorphism
What is Polymorphism?
 A polymorphic reference can refer to different
types of objects at different times
 In java every reference can be polymorphic except of
references to base types and final classes.

 It is the type of the object being referenced, not


the reference type, that determines which method
is invoked
 Polymorphic references are therefore resolved at run-
time, not during compilation; this is called dynamic binding

 Careful use of polymorphic references can lead to


elegant, robust software designs

17
Polymorphism
 Polymorphism: A polymorphic reference v is declared as class C,
but unless C is final or base type, v can refer to an object of
class C or to an object of any class derived from C.
 A method call v.<method_name>(<args>) invokes a method of the
class of an object referred to by v (not necessarily C):
Ex2:
Ex1: void process(Holiday day)
Holiday day = { …
new Christmas(); day.celebrate();
day.celebrate(); … }
… Christmas day = ...;
process(day)
 A very common usage of polymorphism: If classes C1, C2, ....,
Cn are all derived from C, define an array A of elements of C.
The entries A[i] can then refer to objects of classes C1, ...., Cn.
18
The pay-roll of a firm
Staff StaffMember
# name : String
- -staffList:
staffList :staffMemeber[]
StaffMemeber[] # address : String
# phone : String
+ toString() : String
+ payday() : void
+ pay() : double

Method payday() iterates


over elements s of
staffList and calls s.pay()
on each s. Volunteer Employee
# socialSecurityNumber : String
# payRate : double
+ toString() : String
Method payday() also calls + pay() : double + pay() : double

println(s) on each s.

This works because println Executive Hourly


is defined as: - hoursWorked : int
void println(Object o) - bonus : double
+ addHours(moreHours : int) : void
{String s =o.toString()); + toString() : String
+ awardBonus(execBonus : double) : void
OutStream.out(s); + pay() : double + pay() : double
}
19
Single vs. Multiple Inheritance
 Some object-oriented languages allow multiple
inheritance, which allows a class to be derived
from two or more classes, inheriting the members
of all parents
 The price: collisions, such as the same variable
name, same method name in two parents, have to
be resolved
 Java decision: single inheritance, meaning that a
derived class can have only one parent class

20
Interfaces
Java Interface
 A Java interface is a collection of constants
and abstract methods
 abstract method: a method header without a
method body; we declare an abstract method
using the modifier abstract
 since all methods in an interface are abstract,
the abstract modifier is usually left off

 Methods in an interface have public visibility


by default

22
Interface: Syntax
interface is a reserved word

public interface Doable


{
public static final String NAME;

public void doThis();


public int doThat();
public void doThis2 (float value, char ch);
public boolean doTheOther (int num);
}

A semicolon immediately
follows each method header

No method in an
interface has a definition (body)
23
Implementing an Interface
 A class formally implements an interface by
 stating so in the class header in the implements
clause
 a class can implement multiple interfaces: the
interfaces are listed in the implements clause,
separated by commas

 If a class asserts that it implements an


interface, it must define all methods in the
interface or the compiler will produce errors

24
Implementing Interfaces
public class Something implements Doable
{
public void doThis ()
implements is a
{
reserved word
// whatever
}

public void doThat () Each method listed


{ in Doable is
// whatever given a definition
}

// etc.
}

public class ManyThings implements Doable, AnotherDoable


25
Interfaces: An Example
 A class that implements an interface can
implement other methods as well

26
UML Diagram

<<interface>>
Complexity

MiniQuiz + getComplexity () : int


+ setComplexity (int) : void

1
+ main(args : String[]) : void

2 Question

+ getQuestion () : String
+ getAnswer () : String
+ answerCorrect (String) : boolean
+ toString() : String

27
Interfaces: Examples from
Java Standard Class Library
 The Java Standard Class library defines many
interfaces:
 the Iterator interface contains methods that allow the
user to move through a collection of objects easily
• hasNext(), next(), remove()

 the Comparable interface contains an abstract method


called compareTo, which is used to compare two objects

if (obj1.compareTo(obj2) < 0)
System.out.println(“obj1 is less than obj2”);

28
Polymorphism via Interfaces
 Define a polymorphism reference through
interface
 declare a reference variable of an interface type
Doable obj;

 the obj reference can be used to point to any object of


any class that implements the Doable interface

 the version of doThis depends on the type of object


that obj is referring to:
obj.doThis();

29
Example: Polymorphism via Interface

 The payroll program revisited: we want to


sort the employees by name

30
More Examples
Speaker guest; public interface Speaker
{
guest = new Philosopher(); public void speak();
}
guest.speak();
class Philosopher extends Human
guest = Dog(); implements Speaker
guest.speak(); {
//
public void speak()
{…}
Speaker special; public void pontificate()
special = new Philosopher(); {…}
}
special.pontificate(); // compiler error
class Dog extends Animal implements
Speaker
{
//
Speaker special; public void speak()
{
special = new Philosopher();

}
((Philosopher)special).pontificate(); }

31
Interface Hierarchies
 Inheritance can be applied to interfaces as well as
classes
 One interface can be used as the parent of
another
 The child interface inherits all abstract methods
of the parent
 A class implementing the child interface must
define all methods from both the parent and child
interfaces
 Note that class hierarchies and interface
hierarchies are distinct (they do not overlap)

32

You might also like