+ All Categories
Home > Documents > COP3502 Programming Fundamentals for CIS Majors 1

COP3502 Programming Fundamentals for CIS Majors 1

Date post: 24-Feb-2016
Category:
Upload: shiloh
View: 31 times
Download: 0 times
Share this document with a friend
Description:
COP3502 Programming Fundamentals for CIS Majors 1. Instructor: Parisa Rashidi. -. Chapter 11 Inheritance Subclass, superclass s uper keyword abstract keyword Overriding methods Polymorphism and dynamic binding f inal keyword ArrayList. - PowerPoint PPT Presentation
Popular Tags:
76
COP3502 Programming Fundamentals for CIS Majors 1 Instructor: Parisa Rashidi
Transcript
Page 1: COP3502         Programming  Fundamentals for CIS Majors 1

COP3502 Programming Fundamentals for CIS Majors 1

Instructor: Parisa Rashidi

Page 2: COP3502         Programming  Fundamentals for CIS Majors 1

-

Announcements

Page 3: COP3502         Programming  Fundamentals for CIS Majors 1

Chapter 11 Inheritance

Subclass, superclasssuper keywordabstract keywordOverriding methodsPolymorphism and dynamic bindingfinal keyword

ArrayList

Objectives

Page 4: COP3502         Programming  Fundamentals for CIS Majors 1

Suppose you want to define classes to model circles, rectangles, and triangles.

These classes have many common features.

What is the best way to design these classes so to avoid redundancy?

The answer is to use inheritance.

Motivation

Page 5: COP3502         Programming  Fundamentals for CIS Majors 1

Inheritance

Page 6: COP3502         Programming  Fundamentals for CIS Majors 1

Superclass

GeometricObject1

Circle4

Rectangle1

TestCircleRectangle

Run

GeometricObject -color: String -filled: boolean -dateCreated: java.util.Date

+GeometricObject() +GeometricObject(color: String,

filled: boolean) +getColor(): String +setColor(color: String): void +isFilled(): boolean +setFilled(filled: boolean): void +getDateCreated(): java.util.Date +toString(): String

The color of the object (default: white). Indicates whether the object is filled with a color (default: false). The date when the object was created.

Creates a GeometricObject. Creates a GeometricObject with the specified color and filled

values. Returns the color. Sets a new color. Returns the filled property. Sets a new filled property. Returns the dateCreated. Returns a string representation of this object.

Circle -radius: double

+Circle() +Circle(radius: double) +Circle(radius: double, color: String,

filled: boolean) +getRadius(): double +setRadius(radius: double): void +getArea(): double +getPerimeter(): double +getDiameter(): double +printCircle(): void

Rectangle -width: double -height: double

+Rectangle() +Rectangle(width: double, height: double) +Rectangle(width: double, height: double

color: String, filled: boolean) +getWidth(): double +setWidth(width: double): void +getHeight(): double +setHeight(height: double): void +getArea(): double +getPerimeter(): double

Page 7: COP3502         Programming  Fundamentals for CIS Majors 1

Models “is-a” relationship Not all “is-a” relationships should be modeled

using inheritance For class A to extend class B, A should contain

more detailed information than B. Do not blindly extend a class just for the sake

of reusing methods!

Inheritance

Page 8: COP3502         Programming  Fundamentals for CIS Majors 1

A subclass does not inherit the private members of its parent class.

A subclass is not a subset of the superclass Contains more information!

Java does not support multiple inheritance It can be achieved through interfaces (an

advanced topic)

Inheritance

Page 9: COP3502         Programming  Fundamentals for CIS Majors 1

An abstract class may or may not include abstract methods.

Abstract classes cannot be instantiated, but they can be sub-classed.

An abstract method is a method that is declared without an implementation.

If a class includes abstract methods, the class itself must be declared abstract

abstract

Page 10: COP3502         Programming  Fundamentals for CIS Majors 1

An abstract class example

abstract

public abstract class GraphicObject { // declare fields // declare non-abstract methods abstract void draw();}

Page 11: COP3502         Programming  Fundamentals for CIS Majors 1

Inheritance & Constructor

Page 12: COP3502         Programming  Fundamentals for CIS Majors 1

Are superclass constructors inherited? No. Unlike properties and methods, a

superclass's constructors are not inherited in the subclass.

Constructors

Page 13: COP3502         Programming  Fundamentals for CIS Majors 1

1. The constructors are invoked either explicitly:

Using the super keyword2. Or implicitly:

If the keyword super is not explicitly used, the superclass's no-arg constructor is automatically invoked.

Constructors

Page 14: COP3502         Programming  Fundamentals for CIS Majors 1

A constructor may invoke An overloaded constructor or Its superclass’s constructor

If none of them is invoked explicitly, the compiler puts super() as the first statement in the constructor.

Constructors

Page 15: COP3502         Programming  Fundamentals for CIS Majors 1

Example

Constructors

Page 16: COP3502         Programming  Fundamentals for CIS Majors 1

The keyword super refers to the superclass of the class in which super appears.

This keyword can be used in two ways: To call a superclass constructor To call a superclass method

super

Page 17: COP3502         Programming  Fundamentals for CIS Majors 1

You must use the keyword super to call the superclass constructor.

Invoking a superclass constructor’s name in a subclass causes a syntax error.

Java requires that the statement that uses the keyword super appear first in the constructor.

Constructors

Page 18: COP3502         Programming  Fundamentals for CIS Majors 1

Constructor chaining Constructing an instance of a class invokes

all the superclasses’ constructors along the inheritance chain.

This is called constructor chaining.

Chaining

Page 19: COP3502         Programming  Fundamentals for CIS Majors 1

Chaining

Page 20: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

1. Start from the main method

Page 21: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

2. Invoke Faculty constructor

Page 22: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

3. Invoke Employee’s no-arg constructor

Page 23: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

4. Invoke Employee(String)

Page 24: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

5. Invoke Person()

constructor

Page 25: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

6. Execute println

Page 26: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

7. Execute println

Page 27: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

8. Execute println

Page 28: COP3502         Programming  Fundamentals for CIS Majors 1

Chainingpublic class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); }} class Employee extends Person { public Employee() { this("(2) Invoke Employee’s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); }  public Employee(String s) { System.out.println(s); }} class Person { public Person() { System.out.println("(1) Person's no-arg constructor invoked"); }}

9. Execute println

Page 29: COP3502         Programming  Fundamentals for CIS Majors 1

Chaining in the program:

Chaining

Page 30: COP3502         Programming  Fundamentals for CIS Majors 1

Find out the errors in the program:

Chaining

Page 31: COP3502         Programming  Fundamentals for CIS Majors 1

Subclass/Superclass

Page 32: COP3502         Programming  Fundamentals for CIS Majors 1

A subclass extends properties and methods from the superclass.

You can also: Add new properties Add new methods Override the methods of the

superclass

Subclass

Page 33: COP3502         Programming  Fundamentals for CIS Majors 1

You could rewrite the printCircle() method in the Circle class as follows:

Subclass

Page 34: COP3502         Programming  Fundamentals for CIS Majors 1

Overriding

Page 35: COP3502         Programming  Fundamentals for CIS Majors 1

A subclass inherits methods from a superclass.

Sometimes it is necessary for the subclass to modify the implementation of a method defined in the superclass.

This is referred to as method overriding.

Overriding

Page 36: COP3502         Programming  Fundamentals for CIS Majors 1

Method overriding

Overriding

Page 37: COP3502         Programming  Fundamentals for CIS Majors 1

An instance method can be overridden only if it is accessible. Thus a private method cannot be

overridden. If a method defined in a subclass is

private in its superclass, the two methods are completely unrelated.

Overriding

Page 38: COP3502         Programming  Fundamentals for CIS Majors 1

Like an instance method, a static method can be inherited.

However, a static method cannot be overridden. If a static method defined in the

superclass is redefined in a subclass, the method defined in the superclass is hidden.

Overriding

Page 39: COP3502         Programming  Fundamentals for CIS Majors 1

Overriding vs. overloading

Overriding

Page 40: COP3502         Programming  Fundamentals for CIS Majors 1

Object Class

Page 41: COP3502         Programming  Fundamentals for CIS Majors 1

Every class in Java is descended from the java.lang.Object class.

If no inheritance is specified when a class is defined, the superclass of the class is Object.

Object Class

Page 42: COP3502         Programming  Fundamentals for CIS Majors 1

Equivalent

Object Class

Page 43: COP3502         Programming  Fundamentals for CIS Majors 1

The toString() method returns a string representation of the object.

The default implementation returns a string consisting of:

a class name of which the object is an instance,

(@), and a number representing this

object.

Object Class

Page 44: COP3502         Programming  Fundamentals for CIS Majors 1

The code displays something like Loan@15037e5.

This message is not very helpful or informative.

Usually you should override the toString method so that it returns a digestible string representation of the object.

Object Class

Page 45: COP3502         Programming  Fundamentals for CIS Majors 1

Polymorphism

Page 46: COP3502         Programming  Fundamentals for CIS Majors 1

An object of a subtype can be used wherever its supertype value is required.

This feature is known as polymorphism.

Polymorphism

Page 47: COP3502         Programming  Fundamentals for CIS Majors 1

Three pillars of OOP1. Encapsulation2. Inheritance3. Polymorphism

Polymorphism

Page 48: COP3502         Programming  Fundamentals for CIS Majors 1

Polymorphism

Code

Page 49: COP3502         Programming  Fundamentals for CIS Majors 1

If polymorphism is used: Which implementation is used will

be determined dynamically by the Java Virtual Machine at runtime.

This capability is known as dynamic binding.

Code

Page 50: COP3502         Programming  Fundamentals for CIS Majors 1

Code

Page 51: COP3502         Programming  Fundamentals for CIS Majors 1

Suppose an object o is an instance of classes C1, C2, ..., Cn-1, and Cn, where C1 is a subclass of C2, C2 is a subclass of C3, ..., and Cn-1 is a subclass of Cn.

That is, Cn is the most general class, and C1 is the most specific class.

In Java, Cn is the Object class.

Binding

Page 52: COP3502         Programming  Fundamentals for CIS Majors 1

If o invokes a method p, the JVM searches the implementation for the method p in C1, C2, ..., Cn-1 and Cn, in this order, until it is found.

Once an implementation is found, the search stops and the first-found implementation is invoked.

Binding

Page 53: COP3502         Programming  Fundamentals for CIS Majors 1

Matching a method signature The compiler finds a matching

method according to parameter type, number of parameters, and order of the parameters at compilation time.

Binding a method A method may be implemented in

several subclasses. The Java Virtual Machine

dynamically binds the implementation of the method at runtime.

Binding

Page 54: COP3502         Programming  Fundamentals for CIS Majors 1

Polymorphism allows methods to be used generically for a wide range of object arguments.

This is known as generic programming.

Generic Programming

Page 55: COP3502         Programming  Fundamentals for CIS Majors 1

If a method’s parameter type is a superclass (e.g., Object), you may pass an object to this method of any of the parameter’s subclasses (e.g., Student or String).

When an object (e.g., a Student object or a String object) is used in the method, the particular implementation of the method of the object that is invoked (e.g., toString) is determined dynamically.

Binding

Page 56: COP3502         Programming  Fundamentals for CIS Majors 1

Casting

Page 57: COP3502         Programming  Fundamentals for CIS Majors 1

Casting can be used to convert an object of one class type to another within an inheritance hierarchy.

Casting

Page 58: COP3502         Programming  Fundamentals for CIS Majors 1

The following statement causes a compilation error:

Because a Student object is always an instance of Object, but an Object is not necessarily an instance of Student!

Casting

Page 59: COP3502         Programming  Fundamentals for CIS Majors 1

Explicit casting must be used when casting an object from a superclass to a subclass.

This type of casting may not always succeed.

Casting

Page 60: COP3502         Programming  Fundamentals for CIS Majors 1

Use the instanceof operator to test whether an object is an instance of a class.

instanceof

Page 61: COP3502         Programming  Fundamentals for CIS Majors 1

This example creates two geometric objects: a circle, and a rectangle. It displays the area and diameter if the object is a circle, and displays area if the object is a rectangle.

Code

TestPolymorphismCasting Run

Page 62: COP3502         Programming  Fundamentals for CIS Majors 1

Equality

Page 63: COP3502         Programming  Fundamentals for CIS Majors 1

The equals() method compares thecontents of two objects.

The default implementation of the equals method in the Object class is as follows

equals()

Page 64: COP3502         Programming  Fundamentals for CIS Majors 1

You can override equals() method in your class

equals()

Page 65: COP3502         Programming  Fundamentals for CIS Majors 1

ArrayList

Page 66: COP3502         Programming  Fundamentals for CIS Majors 1

Array’s size is fixed once the array is created.

Java provides the ArrayList class that can be used to store an unlimited number of objects.

ArrayList

Page 67: COP3502         Programming  Fundamentals for CIS Majors 1

ArrayList

ArrayList

java.util.ArrayList

+ArrayList() +add(o: Object) : void +add(index: int, o: Object) : void +clear(): void +contains(o: Object): boolean +get(index: int) : Object +indexOf(o: Object) : int +isEmpty(): boolean +lastIndexOf(o: Object) : int +remove(o: Object): boolean +size(): int +remove(index: int) : Object +set(index: int, o: Object) : Object

Appends a new element o at the end of this list. Adds a new element o at the specified index in this list. Removes all the elements from this list. Returns true if this list contains the element o. Returns the element from this list at the specified index. Returns the index of the first matching element in this list. Returns true if this list contains no elements. Returns the index of the last matching element in this list. Removes the element o from this list. Returns the number of elements in this list. Removes the element at the specified index. Sets the element at the specified index.

Creates an empty list.

Page 68: COP3502         Programming  Fundamentals for CIS Majors 1

ArrayList You will get a compilation warning

“unchecked operation.” Ignore it. This warning can be fixed using generic types in Chapter 20.

Program

TestArrayList Run

Page 69: COP3502         Programming  Fundamentals for CIS Majors 1

MyStack

Program

MyStack

MyStack -list: ArrayList

+isEmpty(): boolean +getSize(): int +peek(): Object +pop(): Object +push(o: Object): void +search(o: Object): int

Returns true if this stack is empty. Returns the number of elements in this stack. Returns the top element in this stack. Returns and removes the top element in this stack. Adds a new element to the top of this stack. Returns the position of the first element in the stack from

the top that matches the specified element.

A list to store elements.

Page 70: COP3502         Programming  Fundamentals for CIS Majors 1

Accessibility

Page 71: COP3502         Programming  Fundamentals for CIS Majors 1

Another visibility modifier A protected data or a protected

method in a public class can be accessed by any class in the same package or its subclasses

Even if the subclasses are in a different package.

protected

Page 72: COP3502         Programming  Fundamentals for CIS Majors 1

Accessibility summary

Accessibility

Modifier on members in a class

Accessed from the same class

Accessed from the same package

Accessed from a subclass

Accessed from a different package

public

protected -

default - -

private - - -

Page 73: COP3502         Programming  Fundamentals for CIS Majors 1

Accessibility example

Accessibility

Page 74: COP3502         Programming  Fundamentals for CIS Majors 1

A subclass may override a protected method in its superclass and change its visibility to public.

However, a subclass cannot weaken the accessibility of a method defined in the superclass.

For example, if a method is defined as public in the superclass, it must be defined as public in the subclass.

Accessibility

Page 75: COP3502         Programming  Fundamentals for CIS Majors 1

final keyword

Page 76: COP3502         Programming  Fundamentals for CIS Majors 1

A final class cannot be extended

A final variable is a constantA final method cannot be

overridden by its subclasses.

final


Recommended