More Relationships Between Classes

Similar documents
First IS-A Relationship: Inheritance

More About Objects. Zheng-Liang Lu Java Programming 255 / 282

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.

Example: Count of Points

Method Overriding. Note that you can invoke the overridden method through the use of the keyword super.

Example: Count of Points

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

Method Overriding. Note that you can invoke the overridden method through the use of the keyword super.

Subtype Polymorphism

Instance Members and Static Members

Exercise: Singleton 1

Exercise. Zheng-Liang Lu Java Programming 273 / 324

A final method is a method which cannot be overridden by subclasses. A class that is declared final cannot be inherited.

Java Programming 2. Zheng-Liang Lu. Java2 304 Fall Department of Computer Science & Information Engineering National Taiwan University

Another IS-A Relationship

Java Programming 2. Zheng-Liang Lu. Java2 306 Fall Department of Computer Science & Information Engineering National Taiwan University

What is Inheritance?

Inheritance, Polymorphism, and Interfaces

Java Inheritance. Written by John Bell for CS 342, Spring Based on chapter 6 of Learning Java by Niemeyer & Leuck, and other sources.

Object Oriented Programming. Java-Lecture 11 Polymorphism

Inheritance (Outsource: )

Java Object Oriented Design. CSC207 Fall 2014

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

Inheritance (continued) Inheritance

Argument Passing All primitive data types (int etc.) are passed by value and all reference types (arrays, strings, objects) are used through refs.

Chapter 14 Abstract Classes and Interfaces

Advanced Programming - JAVA Lecture 4 OOP Concepts in JAVA PART II

Inheritance, polymorphism, interfaces

CS-202 Introduction to Object Oriented Programming

Java How to Program, 8/e

This week. Tools we will use in making our Data Structure classes: Generic Types Inheritance Abstract Classes and Interfaces

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

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

Inheritance and Polymorphism

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring

25. Generic Programming

Inheritance -- Introduction

Create a Java project named week10

Rules and syntax for inheritance. The boring stuff

Chapter 5 Object-Oriented Programming

Chapter 10 Classes Continued. Fundamentals of Java

Inheritance and Polymorphism. CS180 Fall 2007

Relationships Between Real Things. CSE 143 Java. Common Relationship Patterns. Composition: "has a" CSE143 Sp Student.

VIRTUAL FUNCTIONS Chapter 10

Java Fundamentals (II)

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

COP 3330 Final Exam Review

C++ Important Questions with Answers

OOPS Viva Questions. Object is termed as an instance of a class, and it has its own state, behavior and identity.

Introduction to Object-Oriented Programming

Inheritance. Unit 8. Summary. 8.1 Inheritance. 8.2 Inheritance: example. Inheritance Overriding of methods and polymorphism The class Object

Relationships Between Real Things CSE 143. Common Relationship Patterns. Employee. Supervisor

Object Oriented Programming Part II of II. Steve Ryder Session 8352 JSR Systems (JSR)

CS 251 Intermediate Programming Inheritance

Object-Oriented Programming More Inheritance

CSEN401 Computer Programming Lab. Topics: Object Oriented Features: Abstraction and Polymorphism

Inheritance and Polymorphism

Practice for Chapter 11

OVERRIDING. 7/11/2015 Budditha Hettige 82

Relationships Between Real Things CSC 143. Common Relationship Patterns. Composition: "has a" CSC Employee. Supervisor

AP CS Unit 6: Inheritance Notes

CS111: PROGRAMMING LANGUAGE II

Chapter 5. Inheritance

Implements vs. Extends When Defining a Class

Inheritance. Transitivity

Lecture 36: Cloning. Last time: Today: 1. Object 2. Polymorphism and abstract methods 3. Upcasting / downcasting

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

Programming using C# LECTURE 07. Inheritance IS-A and HAS-A Relationships Overloading and Overriding Polymorphism

Programming in C# Inheritance and Polymorphism

Type Hierarchy. Lecture 6: OOP, autumn 2003

Operators and Expressions

Abstract Classes. Abstract Classes a and Interfaces. Class Shape Hierarchy. Problem AND Requirements. Abstract Classes.

Inheritance and Polymorphism

Chapter 10 Inheritance and Polymorphism. Dr. Hikmat Jaber

type conversion polymorphism (intro only) Class class

CS Programming I: Inheritance

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

8. Polymorphism and Inheritance

OBJECT ORİENTATİON ENCAPSULATİON

Lecture 4: Extending Classes. Concept

Superclasses / subclasses Inheritance in Java Overriding methods Abstract classes and methods Final classes and methods

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

CH. 2 OBJECT-ORIENTED PROGRAMMING

INSTRUCTIONS TO CANDIDATES

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

Binghamton University. CS-140 Fall Dynamic Types

Interfaces. An interface forms a contract between the object and the outside world.

1 Shyam sir JAVA Notes

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

Inheritance & Polymorphism

Inheritance & Polymorphism

PROGRAMMING LANGUAGE 2

Class, Variable, Constructor, Object, Method Questions

Software Paradigms (Lesson 3) Object-Oriented Paradigm (2)

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

Inheritance and object compatibility

Starting Out with Java: From Control Structures Through Objects Sixth Edition

Pieter van den Hombergh Thijs Dorssers Stefan Sobek. February 10, 2017

Graphical Interface and Application (I3305) Semester: 1 Academic Year: 2017/2018 Dr Antoun Yaacoub

Transcription:

More Relationships Between Classes Inheritance: passing down states and behaviors from the parents to their children Interfaces: grouping the methods, which belongs to some classes, as an interface to the outside world Packages: grouping related types, providing access protection and name space management Zheng-Liang Lu AP Computer Science A: Java Programming 248 / 281

First IS-A Relationship: Inheritance The relationships among Java classes form class hierarchy. We can define new classes by inheriting commonly used states and behaviors from predefined classes. A class is a subclass of some class, which is so-called the superclass, by using the extends keyword. For example, B extends A. Semantically, we say B specializes A. Equivalently, one subclass is a special case of the superclass. For example, human and dog are two specific types of animals. Zheng-Liang Lu AP Computer Science A: Java Programming 249 / 281

Note that a class can extend only one other class, while each superclass has the potential for an unlimited number of subclasses. Alternatively, we say A generalizes B and C when both B and C are subclasses of A. Code reuse again. Zheng-Liang Lu AP Computer Science A: Java Programming 250 / 281

Class Hierarchy 1 1 See Fig. 3-1 in p. 113 of Evans and Flanagan. Zheng-Liang Lu AP Computer Science A: Java Programming 251 / 281

Example 1 class Animal { 2 String name; 3 int weight; 4 5 Animal(String s, int w) { name = s; weight = w; } 6 7 void eat() { weight += 1; } 8 void exercise() { weight = 1; } 9 } 10 11 class Human extends Animal { 12 Human(String s, int w) { super(s, w); } 13 void writecode() { System.out.println("Write codes..."); } 14 } 15 16 class Dog extends Animal { 17 Dog(String s, int w) { super(s, w); } 18 void watchdoor() { System.out.println("Watch my door..."); } 19 } Zheng-Liang Lu AP Computer Science A: Java Programming 252 / 281

super Recall that the keyword this is used to refer to the object itself. You can use the keyword super to refer to (non-private) members of the superclass. Note that super() can be used to invoke the constructor of its superclass, just similar to this(). Zheng-Liang Lu AP Computer Science A: Java Programming 253 / 281

Constructor Chaining As the constructor is invoked, the constructor of its superclass is invoked accordingly. You might think that there will be a whole chain of constructors called, all the way back to the constructor of the class Object, the topmost class in Java. So every class is an immediate or a distant subclass of Object. Recall that the method finalize() and tostring() are inherited from Object. tostring(): return a string which can be any information stored in the object. Zheng-Liang Lu AP Computer Science A: Java Programming 254 / 281

Example 1 class A { 2 A() { System.out.println("A is creating..."); } 3 } 4 5 class B extends A { 6 B() { System.out.println("B is creating..."); } 7 // overriding tostring() 8 public String tostring() { return "I am B."; } 9 } 10 11 public class ConstructorChainingDemo { 12 public static void main(string[] args) { 13 B b = new B(); 14 System.out.println(b); 15 } 16 } The println() method (and similar methods) can take an object as input, and invoke tostring() method implicitly. Zheng-Liang Lu AP Computer Science A: Java Programming 255 / 281

Method Overriding The subclass is allowed to change the behavior inherited from its superclass, if needed. If one defines an instance method with its method name, parameters, and its return type, all identical to the previously defined method in its superclass, then this newly defined method overrides the one in the superclass. 2 Compared to overridden methods, method overloading occurs only in the same class. Note that you can invoke the overridden method through the use of the keyword super. 2 The static methods do not follow this rule. Zheng-Liang Lu AP Computer Science A: Java Programming 256 / 281

Example Zheng-Liang Lu AP Computer Science A: Java Programming 257 / 281

Binding Association of the method definition to the method call is known as binding. The binding which can be resolved at the compilation time is known as static binding or early binding. They are the static, private or final methods. 3 If the compiler is not able to resolve the binding, such binding is known as dynamic binding or late binding. For example, method overriding. 3 We will see the final keyword soon. Zheng-Liang Lu AP Computer Science A: Java Programming 258 / 281

When there are multiple implementations of the method in the inheritance hierarchy, the one in the most derived class (the furthest down the hierarchy) always overrides the others, even if we refer to the object through a reference variable of the superclass type. 4 As you can see in Cat Simon. This is so-called subtype polymorphism. 4 An overridden method in Java acts like a virtual function in C++. Zheng-Liang Lu AP Computer Science A: Java Programming 259 / 281

Polymorphism 5 The word polymorphism literally means many forms. Java allows 4 types of polymorphism: coercion (casting) ad hoc polymorphism (overloading) subtype polymorphism parametric polymorphism (generics) Modeling polymorphism in a programming language lets you create a uniform interface to different kinds of operands, arguments, and objects. 5 Read http://www.javaworld.com/article/3033445/learn-java/ java-101-polymorphism-in-java.html. Zheng-Liang Lu AP Computer Science A: Java Programming 260 / 281

Example: Uniform Interface 1 class Student { 2 void doyourwork() {} 3 } 4 5 class HighSchoolStudent extends Student { 6 void writelotsofhomework() { 7 System.out.println("Write a lot of homework qq"); 8 } 9 10 void doyourwork() { writelotsofhomework(); } 11 } 12 13 class CollegeStudent extends Student { 14 void writereports() { 15 System.out.println("Write a lot of reports qq"); 16 } 17 18 void doyourwork() { writereports(); } 19 } Zheng-Liang Lu AP Computer Science A: Java Programming 261 / 281

1 public class PolymorphismDemo { 2 3 public static void main(string[] args) { 4 HighSchoolStudent h =new HighSchoolStudent(); 5 study(h); 6 CollegeStudent c = new CollegeStudent(); 7 study(c); 8 } 9 10 // uniform interface, multiple implementations 11 // for future extension (scalability) 12 static void study(student s) { 13 s.doyourwork(); 14 } 15 16 / no need to write these methods 17 static void study(highschoolstudent s) { 18 s.writelotsofhomework(); 19 } 20 21 static void study(collegestudent s) { 22 s.writelotsofreports(); 23 } 24 / 25 } Zheng-Liang Lu AP Computer Science A: Java Programming 262 / 281

Subtype Polymorphism For convenience, let U be a subtype of T. Liskov Substitution Principle states that T-type objects may be replaced with U-type objects without altering any of the desirable properties of T (correctness, task performed, etc.). 6,7 6 See https://en.wikipedia.org/wiki/liskov_substitution_principle. 7 Also see https://en.wikipedia.org/wiki/solid_(object-oriented_design). Zheng-Liang Lu AP Computer Science A: Java Programming 263 / 281

Casting Upcasting (widening conversion) is to cast the U object to the T variable. 1 T t = new U(); Downcasting (narrow conversion) is to cast the T variable to a U variable. 1 U u = (U) t; // t is T variable reference to a U object. Upcasting is always allowed, but downcasting is allowed only when a U object is passed to the U-type variable. This involves type compatibility by JVM during program execution. Zheng-Liang Lu AP Computer Science A: Java Programming 264 / 281

instanceof The operator instanceof allows us to test whether or not a reference variable is compatible to the object. If not compatible, then JVM will throw an exception ClassCastException. 8 8 We will see the exceptions later. Zheng-Liang Lu AP Computer Science A: Java Programming 265 / 281

1 class T {} 2 class U extends T {} 3 Example 4 public class InstanceofDemo { 5 public static void main(string[] args) { 6 T t1 = new T(); 7 8 System.out.println(t1 instanceof U); // output false 9 System.out.println(t1 instanceof T); // output true 10 11 T t2 = new U(); // upcasting 12 13 System.out.println(t2 instanceof U); // output true 14 System.out.println(t2 instanceof T); // output true 15 16 U u = (U) t2; // downcasting; this is ok. 17 18 u = (U) new T(); // pass the compilation; fail during execution! 19 } 20 } Zheng-Liang Lu AP Computer Science A: Java Programming 266 / 281

Abstraction by Method Overriding and Polymorphism JVM invokes the appropriate method for the current object by looking up from the bottom of the class hierarchy to the top. These methods are also called virtual methods. This mechanism preserves the behaviors of the objects and the super-type variables play the role of placeholders. We manipulate objects in an abstract level; we don t need to know the details when we use them. Zheng-Liang Lu AP Computer Science A: Java Programming 267 / 281

Exercise Imagine that we have a zoo with some animals. 1 class Animal { 2 void speak() {} 3 } 4 class Dog extends Animal { 5 void speak() { System.out.println("woof"); } 6 } 7 class Cat extends Animal { 8 void speak() { System.out.println("meow"); } 9 } 10 class Bird extends Animal { 11 void speak() { System.out.println("tweet"); } 12 } 13 14 public class PolymorphismDemo { 15 public static void main(string[] args) { 16 Animal[] zoo = {new Dog(), new Cat(), new Bird()}; 17 for (Animal a: zoo) a.speak(); 18 } 19 } Zheng-Liang Lu AP Computer Science A: Java Programming 268 / 281

The final Keyword A final variable is a variable which can be initialized once and cannot be changed later. The compiler makes sure that you can do it only once. A final variable is often declared with static keyword and treated as a constant, for example, Math.PI. A final method is a method which cannot be overridden by subclasses. You might wish to make a method final if it has an implementation that should not be changed and it is critical to the consistent state of the object. A class that is declared final cannot be inherited. Zheng-Liang Lu AP Computer Science A: Java Programming 269 / 281

Abstract Class An abstract class is a class declared abstract. The classes that sit at the top of an object hierarchy are typically abstract classes. 9 These abstract class may or may not have abstract methods, which are methods declared without implementation. More explicitly, the methods are declared without braces, and followed by a semicolon. If a class has one or more abstract methods, then the class itself must be declared abstract. All abstract classes cannot be instantiated. Moreover, abstract classes act as placeholders for the subclass objects. 9 The classes that sit near the bottom of the hierarchy are called concrete classes. Zheng-Liang Lu AP Computer Science A: Java Programming 270 / 281

Example Abstract methods and classes are in italic. In this example, the abstract method draw() and resize() should be implemented depending on the real shape. Zheng-Liang Lu AP Computer Science A: Java Programming 271 / 281

Another IS-A Relationship Not all classes share a vertical relationship. Instead, some are supposed to perform the specific methods without a vertical relationship. Consider the class Bird inherited from Animal and Airplane inherited from Transportation. Both Bird and Airplane are able to be in the sky. So they should perform the method canfly(), for example. By semantics, the method canfly() could not be defined in their superclasses. We need a horizontal relationship. Zheng-Liang Lu AP Computer Science A: Java Programming 272 / 281

Example 1 interface Flyable { 2 void canfly(); // implicitly public, abstract 3 } 4 5 class Animal {} 6 7 class Bird extends Animal implements Flyable { 8 void flapwings() { 9 System.out.println("flapping wings"); 10 } 11 12 public void canfly() { flapwings(); } 13 } 14 15 class Transportation {} 16 17 class Airplane extends Transportation implements Flyable { 18 void magic() { 19 System.out.println("flying with magicsssss"); 20 } 21 22 public void canfly() { magic(); } 23 } Zheng-Liang Lu AP Computer Science A: Java Programming 273 / 281

Zheng-Liang Lu AP Computer Science A: Java Programming 274 / 281

1 public class InterfaceDemo { 2 public static void main(string[] args) { 3 Bird b = new Bird(); 4 gofly(b); 5 6 Airplane a = new Airplane(); 7 gofly(a); 8 } 9 10 static void gofly(flyable f) { 11 f.canfly(); 12 } 13 } Zheng-Liang Lu AP Computer Science A: Java Programming 275 / 281

Interfaces An interface forms a contract between the object and the outside world. For example, the buttons on the television set are the interface between you and the electrical wiring on the other side of its plastic casing. An interface is also a reference type, just like classes, in which only method signatures are defined. So they can be the types of reference variables! Zheng-Liang Lu AP Computer Science A: Java Programming 276 / 281

Note that interfaces cannot be instantiated (directly). A class implementing one or multiple interfaces provides method bodies for each defined method signature. This allows a class to play different roles, with each role providing a different set of services. For example, combatants in RPG are also the characters who can trade in the market. Zheng-Liang Lu AP Computer Science A: Java Programming 277 / 281

Example Zheng-Liang Lu AP Computer Science A: Java Programming 278 / 281

Properties of Interfaces The methods of an interface are implicitly public. In most cases, the class which implements the interface should implement all the methods defined in the interface. Otherwise, the class should be abstract. An interface can declare only fields which are static and final. You can also define static methods in the interface. A new feature since Java SE 8 allows to define the methods with implementation in the interface. A method with implementation in the interface is declared default. Zheng-Liang Lu AP Computer Science A: Java Programming 279 / 281

An interface can extend another interface, just like a class which can extend another class. However, an interface can extend many interfaces as you need. For example, Driveable and Updateable are good interface names. Common interfaces are Runnable and Serializable 10. 10 Aka object serialization where an object can be represented as a sequence of bytes that includes the object s data as well as information about the object s type and the types of data stored in the object. Zheng-Liang Lu AP Computer Science A: Java Programming 280 / 281

Timing for Interfaces and Abstract Classes Consider using abstract classes if you want to: share code among several closely related classes declare non-static or non-final fields Consider using interfaces for any of situations as follows: unrelated classes would implement your interface specify the behavior of a particular data type, but not concerned about who implements its behavior take advantage of multiple inheritance Zheng-Liang Lu AP Computer Science A: Java Programming 281 / 281