Download presentation
Presentation is loading. Please wait.
Published byClifford Lee Modified over 8 years ago
1
Catie Welsh April 18, 2011
2
Program 4 due Wed, April 27 th by 11:59pm Final exam, comprehensive ◦ Friday, May 6th, 12pm No class Friday - Holiday 2
3
3
4
Inheritance and polymorphism 4
5
Person has a jump method, so all subclasses have a jump method 5 Person Athlete HighJumper Skydiver ExtremeAthlete XGamesSkater
6
Each subclass has its own jump functionality public class Person { public void jump() { System.out.println("Whee!"); } public class Athlete extends Person { public void jump() { System.out.println("I jump really well!"); } 6
7
ExtremeAthlete is an Athlete XGamesSkater is a Person Person is not necessarily a Skydiver 7 Person Athlete HighJumper Skydiver ExtremeAthlete XGamesSkater
8
Person p = new ExtremeAthlete(); ◦ legal Athlete a = new Athlete(); ◦ legal XGamesSkater xgs = new Person(); ◦ illegal 8
9
“many forms” Enables the substitution of one object for another as long as the objects have the same interface 9
10
public static void jump3Times(Person p) { p.jump(); } public static void main(String[] args) { XGamesSkater xgs = new XGamesSkater(); Athlete ath = new Athlete(); jump3Times(xgs); jump3Times(ath); } 10
11
Note that we wrote the class Person before any of the derived classes were written We can create a new class that inherits from Person, and the correct jump method will be called because of dynamic binding 11
12
The method invocation is not bound to the method definition until the program executes public class SkiJumper extends ExtremeAthlete { public void jump() { System.out.println("Launch off a ramp and land on snow"); } } public static void main(String[] args) { SkiJumper sj = new SkiJumper(); jump3Times(sj); } 12
13
Every class in Java is derived from the class Object ◦ Every class in Java is an Object 13 Animal ReptileMammal HumanCrocodileWhale Object Person StudentEmployee
14
Object has several public methods that are inherited by subclasses Two commonly overridden Object methods: ◦toString ◦equals 14
15
There is a version of System.out.println that takes an Object as a parameter. What happens if we do this? Person p = new Person(); System.out.println(p); We get something like: Person@addbf1 The class name @ hash code 15
16
Every class has a toString method, inherited from Object public String toString() Intent is that toString be overridden, so subclasses can return a custom String representation 16
17
the object’s toString method is called the String that is returned by the toString method is printed 17 public class Person { private String name; public Person(String name) { this.name = name; } public String toString() { return "Name: " + name; } } public class Test { public static void main(String[] args) { Person per = new Person("Apu"); System.out.println(per); } } Output: Person@addbf1 Name: Apu
18
(Assume the Person class has a getName method) public class Student extends Person { private int id; public Student(String name, int id) { super(name); this.id = id; } public String toString() { return "Name: " + getName() + ", ID: " + id; } public class Test { public static void main(String[] args) { Student std = new Student("Apu", 17832); System.out.println(std); } 18 Output: Name: Apu, ID: 17832
19
Would this compile? public class Test { public static void main(String[] args) { Person per = new Student("Apu", 17832); System.out.println(per); } } Yes. What is the output? Automatically calls Student’s toString method because per is of type Student 19 Output: Name: Apu, ID: 17832
20
First try: public boolean equals(Student std) { return (this.id == std.id); } However, we really want to be able to test if two Objects are equal 20
21
Object has an equals method ◦ Subclasses should override it public boolean equals(Object obj) { return (this == obj); } What does this method do? ◦ Returns whether this has the same address as obj ◦ This is the default behavior for subclasses 21
22
Second try public boolean equals(Object obj) { Student otherStudent = (Student) obj; return (this.id == otherStudent.id); } What does this method do? ◦ Typecasts the incoming Object to a Student ◦ Returns whether this has the same id as otherStudent 22
23
public boolean equals(Object obj) { Student otherStudent = (Student) obj; return (this.id == otherStudent.id); } Why do we need to typecast? ◦ Object does not have an id, obj.id would not compile What’s the problem with this method? ◦ What if the object passed in is not actually a Student? ◦ The typecast will fail and we will get a runtime error 23
24
We can test whether an object is of a certain class type: if (obj instanceof Student) { System.out.println("obj is an instance of the class Student"); } Syntax: object instanceof Class_Name Use this operator in the equals method 24
25
Third try public boolean equals(Object obj) { if ((obj != null) && (obj instanceof Student)) { Student otherStudent = (Student) obj; return (this.id == otherStudent.id); } return false; } Reminder: null is a special constant that can be assigned to a variable of a class type – means that the variable does not refer to anything right now 25
26
Get into groups of 3-4 ◦ At least 1 person you have never worked with before ◦ At least 1 video game player Design 3-4 video game characters ◦ Brainstorm instance variables and methods for each ◦ What is common between the characters? ◦ How could you use inheritance to take advantage what is in common? What would your inheritance hierarchy look like? Write your names down and hand it in 26
27
Search Algorithms 27
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.