Inheritance and Polymorphism. CSE 114, Computer Science 1 Stony Brook University

Similar documents
Chapter 11 Inheritance and Polymorphism. Motivations. Suppose you will define classes to model circles,

Chapter 10 Inheritance and Polymorphism. Dr. Hikmat Jaber

Inheritance and Polymorphism

CS 112 Programming 2. Lecture 06. Inheritance & Polymorphism (1) Chapter 11 Inheritance and Polymorphism

Lecture Notes Chapter #9_b Inheritance & Polymorphism

Chapter 11 Inheritance and Polymorphism

Constructor. Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All rights reserved.

Chapter 11 Inheritance and Polymorphism

Chapter 11 Object-Oriented Design Exception and binary I/O can be covered after Chapter 9

Introduction to OOP with Java. Instructor: AbuKhleif, Mohammad Noor Sep 2017

Chapter 11 Inheritance and Polymorphism

CISC 3115 TY3. C09a: Inheritance. Hui Chen Department of Computer & Information Science CUNY Brooklyn College. 9/20/2018 CUNY Brooklyn College

CS1150 Principles of Computer Science Objects and Classes

Inheritance (continued) Inheritance

Chapter 21- Using Generics Case Study: Geometric Bunch. Class: Driver. package csu.matos; import java.util.arraylist; public class Driver {

Abstract Class. Lecture 21. Based on Slides of Dr. Norazah Yusof

Java Classes, Objects, Inheritance, Abstract and Interfaces Recap

22. Inheritance. Java. Summer 2008 Instructor: Dr. Masoud Yaghini

IST311. Advanced Issues in OOP: Inheritance and Polymorphism

24. Inheritance. Java. Fall 2009 Instructor: Dr. Masoud Yaghini

CH. 2 OBJECT-ORIENTED PROGRAMMING

Object Oriented System Development Paradigm. Sunnie Chung CIS433 System Analysis Methods

25. Generic Programming

COMP200 INHERITANCE. OOP using Java, from slides by Shayan Javed

CS-202 Introduction to Object Oriented Programming

Lecture Notes Chapter #9_c Abstract Classes & Interfaces

Generics. CSE260, Computer Science B: Honors Stony Brook University

We are on the GUI fast track path

CS171:Introduction to Computer Science II. Li Xiong

INHERITANCE & POLYMORPHISM. INTRODUCTION IB DP Computer science Standard Level ICS3U. INTRODUCTION IB DP Computer science Standard Level ICS3U

COMP200 - Object Oriented Programming: Test One Duration - 60 minutes

Introduction Programming Using Python Lecture 8. Dr. Zhang COSC 1437 Fall 2017 Nov 30, 2017

Practice for Chapter 11

In this lab, you will be given the implementation of the classes GeometricObject, Circle, and Rectangle, as shown in the following UML class diagram.

JAVA PROGRAMMING LAB. ABSTRACT In this Lab you will learn how to describe objects and classes and how to define classes and create objects

Chapter 14 Abstract Classes and Interfaces

Abstract Classes Interfaces

Programming 2. Inheritance & Polymorphism

Inheritance (Deitel chapter 9)

EKT472: Object Oriented Programming. Overloading and Overriding Method

Contents. I. Classes, Superclasses, and Subclasses. Topic 04 - Inheritance

ITI Introduction to Computing II

ITI Introduction to Computing II

CSA 1019 Imperative and OO Programming

Inheritance and Polymorphism

Making New instances of Classes

Outline. Inheritance. Abstract Classes Interfaces. Class Extension Overriding Methods Inheritance and Constructors Polymorphism.

Java Object Oriented Design. CSC207 Fall 2014

Reusing Classes. Hendrik Speleers

Chapter 6: Inheritance

What is Inheritance?

Programming in Java, 2e Sachin Malhotra Saurabh Choudhary

Computer Science II (20073) Week 1: Review and Inheritance

Chapter 8 Objects and Classes. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved.

Rules and syntax for inheritance. The boring stuff

C12a: The Object Superclass and Selected Methods

Chapter 8 Objects and Classes

HAS-A Relationship. If A uses B, then it is an aggregation, stating that B exists independently from A.

HAS-A Relationship. Association is a relationship where all objects have their own lifecycle and there is no owner.

COMP200 ABSTRACT CLASSES. OOP using Java, from slides by Shayan Javed

Inheritance Motivation

Introduction to Inheritance

1. Which of the following is the correct expression of character 4? a. 4 b. "4" c. '\0004' d. '4'

CMSC131. Inheritance. Object. When we talked about Object, I mentioned that all Java classes are "built" on top of that.

OO Programming Concepts

CS 251 Intermediate Programming Inheritance

Questions Answer Key Questions Answer Key Questions Answer Key

UFCE3T-15-M Object-oriented Design and Programming

Day 4. COMP1006/1406 Summer M. Jason Hinek Carleton University

Chapter 9 - Object-Oriented Programming: Inheritance

Object Oriented Programming

Inheritance. Inheritance allows the following two changes in derived class: 1. add new members; 2. override existing (in base class) methods.

Chapter 9 Objects and Classes. OO Programming Concepts. Classes. Objects. Motivations. Objectives. CS1: Java Programming Colorado State University

Chapter 9 Objects and Classes. Liang, Introduction to Java Programming, Eleventh Edition, (c) 2017 Pearson Education, Inc. All rights reserved.

COMP 250. inheritance (cont.) interfaces abstract classes

Class, Variable, Constructor, Object, Method Questions

ITI Introduction to Computing II

ITI Introduction to Computing II

Methods Common to all Classes

Chapter 13 Abstract Classes and Interfaces

The software crisis. code reuse: The practice of writing program code once and using it in many contexts.

COMPUTER SCIENCE DEPARTMENT PICNIC. Operations. Push the power button and hold. Once the light begins blinking, enter the room code

index.pdf January 21,

Big software. code reuse: The practice of writing program code once and using it in many contexts.

Classes and Inheritance Extending Classes, Chapter 5.2

Advanced Placement Computer Science. Inheritance and Polymorphism

Introductory Programming Inheritance, sections

Chapter 5 Object-Oriented Programming

Inheritance. Notes Chapter 6 and AJ Chapters 7 and 8

More Relationships Between Classes

ITI Introduction to Computing II

CSE 143 Lecture 20. Circle

OBJECT ORİENTATİON ENCAPSULATİON

Java Primer. CITS2200 Data Structures and Algorithms. Topic 2

CISC370: Inheritance

First IS-A Relationship: Inheritance

Example: Count of Points

Object Oriented Programming. Java-Lecture 11 Polymorphism

HAS-A Relationship. Association is a relationship where all objects have their own lifecycle and there is no owner.

Lesson11-Inheritance-Abstract-Classes. The GeometricObject case

Transcription:

Inheritance and Polymorphism CSE 114, Computer Science 1 Stony Brook University http://www.cs.stonybrook.edu/~cse114 1

Motivation Model classes with similar properties and methods: Circles, rectangles and triangles have many common features: getarea(): double getperimeter(): double Inheritance: design classes so to avoid redundancy If we have many colored circles, they all implement the same method getarea() 2

Superclasses and Subclasses -color: String -filled: boolean GeometricObject -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. 3 -radius: double +Circle() 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 -width: double -height: double +Rectangle() 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

public abstract class GeometricObject { private String color = "white"; private boolean filled; private java.util.date datecreated; protected GeometricObject() { datecreated = new java.util.date(); protected GeometricObject(String color, boolean filled) { datecreated = new java.util.date(); this.color = color; this.filled = filled; public String getcolor() { return color; public void setcolor(string color) { this.color = color; public boolean isfilled() { return filled; public void setfilled(boolean filled) { this.filled = filled; public java.util.date getdatecreated() { return datecreated; public String tostring() { return "created on " + datecreated + "\ncolor: " + color + " and filled: " + filled; /** Abstract method getarea */ public abstract double getarea(); /** Abstract method getperimeter */ public abstract double getperimeter();

public class Circle extends GeometricObject { private double radius; public Circle() { public Circle(double radius) { this.radius = radius; public double getradius() { return radius; public void setradius(double radius) { this.radius = radius; public double getarea() { return radius * radius * Math.PI; public double getdiameter() { return 2 * radius; public double getperimeter() { return 2 * radius * Math.PI; /* Print the circle info */ public void printcircle() { System.out.println("The circle is created " + getdatecreated() + " and the radius is " + radius);

public class Rectangle extends GeometricObject { private double width; private double height; public Rectangle() { public Rectangle(double width, double height) { this.width = width; this.height = height; public Rectangle(double width, double height, String color, boolean filled) { super(color,filled); this.width = width; this.height = height; public double getwidth() { return width; public void setwidth(double width) { this.width = width; public double getheight() { return height; public void setheight(double height) { this.height = height; public double getarea() { return width * height; public double getperimeter() { return 2 * (width + height);

public class TestGeometricObject { public static void main(string[] args) { GeometricObject c = new Circle(); GeometricObject r = new Rectangle(); System.out.println("Circle area: " + c.getarea()); displayobject(c); displayobject(r); public static void displayobject(object object) { if (object instanceof Circle) { System.out.println("The circle area is " + ((Circle) object).getarea()); System.out.println("The circle diameter is " + ((Circle) object).getdiameter()); else if (object instanceof Rectangle) { System.out.println("The rectangle area is " + ((Rectangle) object).getarea());

Are superclass s Constructor Inherited? No. They are not inherited. They are invoked explicitly or implicitly: Explicitly using the super keyword If the keyword super is not explicitly used, the superclass's no-arg constructor is automatically invoked as the first statement in the constructor, unless another constructor is invoked (when the last constructor in the chain will invoke the superclass constructor) public A() { is equivalent to public A() { super(); 8 public A(double d) { // some statements is equivalent to public A(double d) { super(); // some statements

Using the Keyword super 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: Java requires that the statement that uses the keyword super appear first in the constructor (unless another constructor is called or the superclass constructor is called implicitly) To call a superclass method 9

Constructor Chaining Constructor chaining : constructing an instance of a class invokes all the superclasses constructors along the inheritance chain. public class Faculty extends Employee { public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); public static void main(string[] args) { new Faculty(); 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 is invoked"); 10

Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); 1. Start from the main method 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 is invoked"); 11

Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); 2. Invoke Faculty constructor 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 is invoked"); 12

Execution public 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"); 3. Invoke Employee s noarg constructor 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 is invoked"); 13

Execution public 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"); 4. Invoke Employee(String) constructor 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 is invoked"); 14

Execution public 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); 5. Invoke Person() constructor class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 15

Execution public 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 is invoked"); 16 6. Execute println

Execution public 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 is invoked"); 17 7. Execute println

Execution public 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 is invoked"); 18 8. Execute println

Execution public 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"); 9. Execute println 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 is invoked"); 19

Calling Superclass Methods public void printcircle() { System.out.println( "The circle is created " + super.getdatecreated() + " and the radius is " + radius); 20

Declaring a Subclass A subclass extends properties and methods from the superclass. You can also: Add new properties Add new methods Override the methods of the superclass 21

Overriding Methods in the Superclass Method overriding: modify in the subclass the implementation of a method defined in the superclass: public class Circle extends GeometricObject { /** Override the tostring method defined in GeometricObject */ public String tostring() { return super.tostring() + "\nradius is " + radius; // Other methods are omitted... 22

Overriding Methods in the Superclass 23 An instance method can be overridden only if it is accessible A private method cannot be overridden, because it is not accessible outside its own class If a method defined in a subclass is private in its superclass, the two methods are completely unrelated A static method can be inherited 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 vs. Overloading public class Test { public static void main(string[] args) { A a = new A(); a.p(10); a.p(10.0); 10.0 10.0 class B { public void p(double i) { System.out.println(i * 2); class A extends B { // This method overrides the method in B public void p(double i) { System.out.println(i); public class Test { public static void main(string[] args) { A a = new A(); a.p(10); a.p(10.0); class B { public void p(double i) { System.out.println(i * 2); 10 20.0 class A extends B { // This method overloads the method in B public void p(int i) { System.out.println(i); 24

The Object Class and Its Methods 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 java.lang.object public class Circle {... Equivalent public class Circle extends Object {... 25

The tostring() method in Object The tostring() method returns a string representation of the object The default Object implementation returns a string consisting of a class name of which the object is an instance, the at sign (@), and a number representing this object Loan loan = new Loan(); System.out.println(loan.toString()); The code displays something like Loan@12345e6 you should override the tostring() method so that it returns an informative string representation of the object 26

Polymorphism, Dynamic Binding and Generic Programming public class PolymorphismDemo { public static void main(string[] args) { m(new GraduateStudent()); m(new Student()); m(new Person()); m(new Object()); public static void m(object x) { System.out.println(x.toString()); class GraduateStudent extends Student { class Student extends Person { public String tostring() { return "Student"; class Person extends Object { public String tostring() { return "Person"; 27 Method m takes a parameter of the Object type can be invoked with any object Polymorphism: an object of a subtype can be used wherever its supertype value is required Dynamic binding: the Java Virtual Machine determines dynamically at runtime which implementation is used by the method When the method m(object x) is executed, the argument x s tostring method is invoked. Output: Student Student Person java.lang.object@12345678

Dynamic Binding Suppose an object o is an instance of classes C 1, C 2,..., C n-1, and C n C 1 is a subclass of C 2, C 2 is a subclass of C 3,..., and C n-1 is a subclass of C n C n is the most general class, and C 1 is the most specific class If o invokes a method p, the JVM searches the implementation for the method p in C 1, C 2,..., C n-1 and C n, in this order, until it is found, the search stops and the first-found implementation is invoked C n C n-1..... C 2 C 1 Since o is an instance of C 1, o is also an instance of C 2, C 3,, C n-1, and C n 28

Dynamic Binding public class PolymorphismDemo { public static void main(string[] args) { m(new GraduateStudent()); m(new Student()); m(new Person()); m(new Object()); public static void m(object x) { System.out.println(x.toString()); class GraduateStudent extends Student { class Student extends Person { public String tostring() { return "Student"; class Person extends Object { public String tostring() { return "Person"; Output: Student Student Person java.lang.object@12345678 29

Method Matching vs. Binding The compiler finds a matching method according to parameter type, number of parameters, and order of the parameters at compilation time The Java Virtual Machine dynamically binds the implementation of the method at runtime 30

Generic Programming public class PolymorphismDemo { public static void main(string[] args) { m(new GraduateStudent()); m(new Student()); m(new Person()); m(new Object()); public static void m(object x) { System.out.println(x.toString()); class GraduateStudent extends Student { class Student extends Person { public String tostring() { return "Student"; class Person extends Object { public String tostring() { return "Person"; Generic programming: polymorphism allows methods to be used generically for a wide range of object arguments: 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) and the particular implementation of the method of the object that is invoked is determined dynamically 31

Casting Objects Casting can be used to convert an object of one class type to another within an inheritance hierarchy m(new Student()); is equivalent to: Object o = new Student(); m(o); // Implicit casting Legal because an instance of Student is automatically an instance of Object 32

Why Casting Is Necessary? Student b = o; A compilation error would occur because an Object o is not necessarily an instance of Student We use explicit casting to tell the compiler that o is a Student object - syntax is similar to the one used for casting among primitive data types Student b = (Student)o; This type of casting may not always succeed (check this with instanceof operator) 33

The instanceof Operator Use the instanceof operator to test whether an object is an instance of a class: Object myobject = new Circle();... if (myobject instanceof Circle) { System.out.println("The circle diameter is " + ((Circle)myObject).getDiameter());... 34

35 public class CastingDemo{ public static void main(string[] args){ Object object1 = new Circle(1); Object object2 = new Rectangle(1, 1); displayobject(object1); displayobject(object2); public static void displayobject(object object) { if (object instanceof Circle) { System.out.println("The circle area is " + ((Circle)object).getArea()); System.out.println("The circle diameter is " + ((Circle)object).getDiameter()); else if (object instanceof Rectangle) { System.out.println("The rectangle area is " + ((Rectangle)object).getArea());

The equals Method The equals()method compares the contents of two objects - the default implementation of the equals method in the Object class is as follows: Override the equals()method in other classes: 36 public boolean equals(object obj) { return (this == obj); public boolean equals(object o) { if (o instanceof Circle) { return radius == ((Circle)o).radius; else return false;

The ArrayList Class You can create arrays to store objects - But the array s size is fixed once the array is created. Java provides the java.util.arraylist class that can be used to store an unlimited number of objects: 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 Creates an empty list. 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. 37

public class TestArrayList { public static void main(string[] args) { // Warnings java.util.arraylist citylist = new java.util.arraylist(); citylist.add("london");citylist.add("new York");cityList.add("Paris"); citylist.add("toronto");citylist.add("hong Kong"); System.out.println("List size? " + citylist.size()); System.out.println("Is Toronto in the list? " + citylist.contains("toronto")); System.out.println("The location of New York in the list? " + citylist.indexof("new York")); System.out.println("Is the list empty? " + citylist.isempty()); // false citylist.add(2, "Beijing"); citylist.remove("toronto"); for (int i = 0; i < citylist.size(); i++) System.out.print(cityList.get(i) + " "); System.out.println(); // Create a list to store two circles java.util.arraylist list = new java.util.arraylist(); list.add(new Circle(2)); list.add(new Circle(3)); System.out.println( ((Circle)list.get(0)).getArea() ); 38

public class TestArrayList { public static void main(string[] args) { 39 java.util.arraylist<string> citylist=new java.util.arraylist<string>(); citylist.add("london");citylist.add("new York");cityList.add("Paris"); citylist.add("toronto");citylist.add("hong Kong"); System.out.println("List size? " + citylist.size()); System.out.println("Is Toronto in the list? " + citylist.contains("toronto")); System.out.println("The location of New York in the list? " + citylist.indexof("new York")); System.out.println("Is the list empty? " + citylist.isempty()); // false citylist.add(2, "Beijing"); citylist.remove("toronto"); for (int i = 0; i < citylist.size(); i++) System.out.print(cityList.get(i) + " "); System.out.println(); // Create a list to store two circles java.util.arraylist<circle> list = new java.util.arraylist<circle>(); list.add(new Circle(2)); list.add(new Circle(3)); System.out.println( list.get(0).getarea() ); // Generics: eliminates warnings

The MyStack Class Custom stack A stack to hold objects. MyStack -list: ArrayList +isempty(): boolean +getsize(): int +peek(): Object +pop(): Object +push(o: Object): void +search(o: Object): int A list to store elements. 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. 40

public class MyStack { private java.util.arraylist list = new java.util.arraylist(); public boolean isempty() { return list.isempty(); public int getsize() { return list.size(); public Object peek() { return list.get(getsize() - 1); public Object pop() { Object o = list.get(getsize() - 1); list.remove(getsize() - 1); return o; public void push(object o) { list.add(o); public int search(object o) { return list.lastindexof(o); public String tostring() { return "stack: " + list.tostring();

The protected 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 Visibility increases private, default (if no modifier is used), protected, public 42

Accessibility Summary 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 - - - 43

Visibility Modifiers package p1; public class C1 { public int x; protected int y; int z; private int u; protected void m() { public class C2 { C1 o = new C1(); can access o.x; can access o.y; can access o.z; cannot access o.u; can invoke o.m(); package p2; public class C3 extends C1 { can access x; can access y; can access z; cannot access u; public class C4 extends C1 { can access x; can access y; cannot access z; cannot access u; public class C5 { C1 o = new C1(); can access o.x; cannot access o.y; cannot access o.z; cannot access o.u; can invoke m(); can invoke m(); cannot invoke o.m(); 44

A Subclass Cannot Weaken the Accessibility 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. The modifiers are used on classes and class members (data and methods), except that the final modifier can also be used on local variables in a method - A final local variable is a constant inside a method. 45

The final Modifier A final variable is a constant: final static double PI = 3.14159; A final method cannot be overridden by its subclasses A final class cannot be extended: final class Math {... 46

UML Class Diagram Visibility: + = Public - = Private # = Protected ~ = Package underline = Static 47 Generalization Relationship Instance Level Relationships Association Composition Aggregation if the container is destroyed, its contents are not