Download presentation
Presentation is loading. Please wait.
Published byAdele Floyd Modified over 9 years ago
1
CS 112 Introduction to Programming Inheritance Yang (Richard) Yang Computer Science Department Yale University 308A Watson, Phone: 432-6400 Email: yry@cs.yale.edu
2
2 Admin Class project
3
3 Recap: OOP Analysis GeoMapRegion Polygon Color Point 1mm2 111m A composition relationship An association relationship
4
Retrieve region m Batch: retrieve list of all regions m Specific: retrieve one specific region Coloring m Map properties of a region to a color 4 Recap: OOP Analysis: Controller Structure
5
Encapsulation is a key problem solving technique for large, complex problems A good way to learn more is to read about designs of large-scale OOP software systems Recap: OOP Analysis
6
6 Software Design and Reuse Question: What programming language feature(s) have we covered to allow software reuse?
7
7 Outline Admin and recap Class inheritance o why and how?
8
A Law Firm Problem: Setting Consider the following law firm: m Work time policy: Employees work 40 hours / week. m Pay policy: Employees make a base salary of $50,000 per year, except that o legal secretaries make 10% extra over base per year, o marketers make 20% extra over base per year, o lawyers who reach partner level get bonus. m Vacation policy: Employees have 2 weeks of paid vacation leave per year, except that o lawyers get an extra week on top of base, o employees should use a yellow form to apply for leave, except for lawyers who use a pink form. 8
9
A Law Firm Problem: Setting Each type of employee has some job functions: Lawyers know how to sue. Marketers know how to advertise. Secretaries know how to prepare ordinary documents. Legal secretaries know how to prepare both ordinary documents and legal documents. 9
10
An Employee class public class Employee { public int hours() { return 40; // works 40 hours / week } public double pay() { return 50000.0; // $50,000.00 / year } public int vacationDays() { return 10; // 2 weeks' paid vacation } public String vacationForm() { return "yellow"; // use the yellow form } public String toString() { String result = "Hours: " + hours() + "\n"; result += "Pay: " + pay() + "\n"; result += "Vacation days: " + vacationDays() + "\n"; result += "Vacation Form: " + vacationForm() + "\n"; return result; } 10
11
Question: Writing class Secretary Secretaries are employees who can prepare documents. 11
12
Secretary class: Attempt 1 public class Secretary { public int hours() { return 40; // works 40 hours / week } public double pay() { return 50000.0; // $50,000.00 / year } public int vacationDays() { return 10; // 2 weeks' paid vacation } public String vacationForm() { return "yellow"; // use the yellow form } public String toString() { String result += "Hours: " + hours() + "\n"; result += "Pay: ” + pay() + "\n"; result += "Vacation days: " + vacationDays() + "\n"; result += "Vacation Form: " + vacationForm() + "\n"; return result; } public void prepareDoc(String text) { System.out.println(“Working on Document: " + text); } } 12
13
Desire for code-sharing prepareDoc is the only unique behavior in Secretary. We'd like to be able to say: // A class to represent secretaries. public class Secretary { public void prepareDoc(String text) { System.out.println(“Work on Document: " + text); } 13
14
Inheritance Inheritance: A way to allow a software developer to reuse classes by deriving a new class from an existing one m The existing class is called the parent class, or superclass, or base class m The derived class is called the child class or subclass. As the name implies, the child inherits characteristics of the parent m The child class inherits every method and every data field defined for the parent class 14
15
15 Inheritance Inheritance relationships are often shown graphically in a class diagram, with the arrow pointing to the parent class Inheritance should create an is-a relationship, meaning the child is a more specific version of the parent Animal - weight : int + getWeight() : int Bird + fly() : void - flySpeed : int
16
16 Inheritance The child class inherits all methods and data defined for the parent class Animal - weight : int + getWeight() : int Bird - flySpeed : int + fly() : void weight = 120 getWeight() weight = 100 flySpeed = 30 getWeight() fly() an animal object a bird object
17
17 Deriving Subclasses: Syntax public class extends { } For example: class Animal { // class contents private int weight; public int getWeight() {…} } class Bird extends Animal { private int flySpeed; public void fly() {…}; }
18
Exercise: Implement Secretary 18
19
Improved Secretary code // A class to represent secretaries. public class Secretary extends Employee { public void prepareDoc(String text) { System.out.println(“Working on document: " + text); } } By extending Employee, each Secretary object now: receives methods hours, pay, vacationDays, vacationForm, toString from Employee ’s definition automatically can be treated as an Employee by client code (seen later) Now we only write the parts unique to each type. 19
20
20 Outline Admin and recap Class inheritance o why and how? o inheritance and object construction
21
21 Inheritance and Constructor When constructing an object, Java makes sure that the constructor of the parent is first called If no parent constructor called, Java automatically inserts super() as the first statement in the constructor of a child class: public class Secretary extends Employee { public Secretary () { // super() is automatically inserted System.out.println(“In Secretary()”); } … }
22
Example 22 public class Secretary extends Employee { public Secretary() { // super() is automatically inserted System.out.println(“In Secretary()”); } … } public class Employee { public Employee() { System.out.println(“In Employee()”); } … } public static void main(String[] args) { Secretary seth = new Secretary(); } In Employee() In Secretary() Output:
23
Exercise: Add Name to Employee public class Employee { private String name; public Employee(String name) { this.name = name; } … } 23
24
Problem with constructors Now that we've added the constructor to the Employee class, our subclasses do not compile. The short explanation: Once we write a constructor (that requires parameters) in the superclass, we must now write constructors for our employee subclasses as well. The long explanation: (next couple slides)
25
25 The explanation Constructors aren't inherited. The Employee subclasses don't inherit the public Employee(String name) constructor. After defining public Employee(String), Java sees that we have a constructor, and will no longer provide the default Employee constructor. i.e., public Employee() is not defined unless we define it explicitly But public Secretary() { // super() is automatically inserted but not defined // in Employee System.out.println(“In Secretary()”); }
26
26 super and Constructor If you insert super(…) as the first statement in child’s constructor, Java will not insert the default parent constructor: public class Secretary extends Employee { public Secretary(String name) { super(name); System.out.println(“In Secretary()”); } … } public class Employee { private String name; public Employee(String name) { System.out.println(“In Employee()”); this.name = name; } … }
27
Example: Picture Type Raster graphics. Basis for image processing. Set of values. 2D array of Color objects (pixels). API.
28
Exercise: Extending the Picture Type Although the Picture class is quite useful already, it misses some useful filtering functions such as grayScale, scaling Goal: create a new type InstaPic with all of the existing methods defined in Picture, with two additional methods: gray and scale 28
29
Monochrome Luminance Monochrome luminance. Effective brightness of a color (NTSC formula): Y = 0.299r + 0.587g + 0.114b. import java.awt.Color; public class Luminance { public static double lum(Color c) { int r = c.getRed(); int g = c.getGreen(); int b = c.getBlue(); return.299*r +.587*g +.114*b; }
30
Grayscale Filter mandrill.jpg
31
Color Compatibility Q. Which font colors will be most readable with which background colors on computer and cell phone screens? A. Rule of thumb: difference in luminance should be 128. public static boolean compatible(Color a, Color b) { return Math.abs(lum(a) - lum(b)) >= 128.0; } 208255281410547
32
Scaling Filter mandrill.jpg (298-by-298)
33
Image Scaling Goal. Shrink or enlarge an image to desired size. Assume uniform strategy to convert from w s -by- h s to w t -by- h t : ? source image (w s -by-h s ) target image (w t -by-h t ) y (x,y) y hs / ht)y hs / ht)(x w s / w t,
34
Scaling Filter Scaling filter. Creates two Picture objects and two windows. % java Scale mandrill.jpg 400 200 mandrill.jpg (298-by-298)
35
Back to Law Firm: Implementing the Lawyer class: Attempt 1 // A class to represent lawyers. public class Lawyer extends Employee { public void sue() { System.out.println("I'll see you in court!"); } 35
36
Problem We want lawyers to inherit most behaviors from employee, but we want to replace parts with new behavior: o Lawyers get an extra week of paid vacation over base vacation (a total of 3). o Lawyers use a pink form when applying for vacation leave. 36
37
37 Defining Methods in the Child Class: Overriding Methods A child class can (have the option to) override the definition of an inherited method in favor of its own m that is, a child can redefine a method that it inherits from its parent m the new method must have the same signature as the parent's method, but can have different code in the body The method invoked is always the one defined in the child class, if the child class refines (overrides) a method
38
Lawyer class // A class to represent lawyers. public class Lawyer extends Employee { // overrides getVacationDays from Employee class public int vacationDays() { return 15; // 3 weeks vacation } // overrides getVacationForm from Employee class public String vacationForm() { return "pink"; } public void sue() { System.out.println("I'll see you in court!"); } 38
39
39 Overloading vs. Overriding Overloading deals with multiple methods in the same class with the same name but different signatures Overloading lets you define a similar operation in different ways for different data Overriding deals with two methods, one in a parent class and one in a child class, that have the same signature Overriding lets you define a similar operation in different ways for different object types
40
Marketer class – Exercise: Complete the Marketer class. Marketers can advertise and make 20% more than the base ($60,000 total). 40
41
Marketer class // A class to represent marketers. public class Marketer extends Employee { public void advertise() { System.out.println("Act while supplies last!"); } // override public double pay() { return 60000.0; // $60,000.00 / year } 41 Problem of design?
42
A Problem public class Marketer extends Employee { public double pay() { return 60000.0; }... } Problem: The Marketer‘s salaries are based on the Employee’s base salary (20% more than base), but the pay code does not reflect this. 42
43
Changes to Common Behavior Imagine a company-wide change affecting all employees. Example: Everyone is given a $10,000 raise due to inflation. The base employee salary is now $60,000. Marketers should now make $72,000. We must modify our code to reflect this policy change. 43
44
Modifying the superclass // A class to represent employees in general (20-page manual). public class Employee { public int hours() { return 40; // works 40 hours / week } public double pay() { return 60000.0; // $60,000.00 / year }... } Issue: the Marketer subclass is still incorrect. It has overridden pay to return another value. Requirement: derived behavior is based on base behavior 44
45
Calling overridden methods Subclasses can call overridden methods with super super. ( ) – Exercise: Modify Marketer to derive pay for marketers from base pay. 45
46
Improved subclasses public class Marketer extends Employee { public void advertise() { System.out.println("Act now while supplies last!"); } // override and invoke the parent’s version public double pay() { return super.pay() * 1.2; } 46
47
Exercise: Revise Lawyer to Maintain Consistency 47
48
Solution public class Lawyer extends Employee { public String vacationForm() { return "pink"; } public int vacationDays() { return super.vacationDays() + 5; } public void sue() { System.out.println("I'll see you in court!"); } 48
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.