Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programming with inheritance Based on slides by Alyssa Harding

Similar presentations


Presentation on theme: "Programming with inheritance Based on slides by Alyssa Harding"— Presentation transcript:

1 Programming with inheritance Based on slides by Alyssa Harding
CSE 143 Lecture 25 Programming with inheritance Based on slides by Alyssa Harding

2 Inheritance Key feature of object-oriented programming
Very powerful tool As with most powerful tools, have to learn the details of how to use them correctly. Before midterm we saw the mechanics of how inheritance works We remember some things about extending classes, super calls, and inherited methods, ...right? Today we will look at more examples and more details about how to use inheritance correctly

3 Example: StutterList We want a class that has all the functionality of ArrayList but adds everything twice For instance, the following code: StutterList<String> s = new StutterList<String>(); s.add(“why”); s.add(“hello”); s.add(“there”); System.out.println(s); outputs: [“why”, “why”, “hello”, ”hello”, “there, “there”]

4 Example: StutterList How would we do this?
We could write an entirely new class by copying and pasting the ArrayList<E> code But that’s redundant We could change the ArrayList<E> code to include our new functionality But this is invasive change It would ruin any code that depended on the original functionality of ArrayList<E>

5 Example: StutterList We want additive, not invasive, change!
Instead, we just want to add onto the ArrayList<E> We want to extend its functionality using inheritance: public class StutterList<E> extends ArrayList<E> { }

6 Example: StutterList Now we override the old add method to include our stutter functionality: public class StutterList<E> extends ArrayList<E> { public boolean add(E value) { super.add(value); return true; } Instead of worrying about the details, we can use the super class’s add method

7 Example: TranslatePoint
Or maybe we want a Point that keeps track of how many times it has been translated: public class TranslatePoint extends Point { private int count; } We need a field to keep track of our new state, but we rely on the Point class to keep track of the regular state

8 Example: TranslatePoint
We then need to override the translate method to update our new state while still keeping the old functionality: public void translate(int x, int y) { count++; super.translate(x,y); } We need to make sure we call the super class’ method, otherwise we would have infinite recursion!

9 Example: TranslatePoint
We can also add more functionality to the class: public int getTranslateCount() { return count; }

10 Example: TranslatePoint
We still need to think about constructors. Constructors are not inherited like the rest of the methods. Even when we don’t specify one, Java automatically includes an empty, zero-argument constructor: public TranslatePoint() { // do nothing } But it doesn’t actually do nothing...

11 Example: TranslatePoint
Java needs to construct a TranslatePoint, so it at least needs to construct a Point It automatically includes a call on the super class’ constructor: public TranslatePoint() { super(); } We can use the super() notation to call the super class’ constructor just like we use the this() notation to call this class’ constructor

12 Example: TranslatePoint
But we want to be able to specify coordinates, so we will need to make a constructor The first thing we need to do is include a call on the super class’ constructor: public TranslatePoint(int x, int y) { super(x,y); count = 0; }

13 Example: TranslatePoint
However, now that we have a constructor, Java won’t automatically give us a zero-argument constructor Since we still want one, we have to explicitly program it: public TranslatePoint() { this(0,0); }

14 Inheritance Recap Fields. What additional information do you need to keep track of? Constructors. If you want a constructor that takes parameters, you have to create one and call the super class’ constructor in it. Overridden methods. What methods affect the new state? These need to be overridden. Again, call the super method when you need to accomplish the old task. Added methods. What new behavior does your class need?

15 Graphics Another useful application: graphical user interfaces (GUIs)
Think of all the different programs on your computer. You wouldn’t want to code each type of window, textbox, scrollbar individually! Java includes basic graphical classes that we can extend to add more functionality Here’s the API documentation for a frame:

16 Graphics We can use this to customize our own type of frame:
public class FunFrame extends Frame { public FunFrame() { setVisible(true); setSize(400, 400); setTitle("Such fun!"); setBackground(Color.PINK); }


Download ppt "Programming with inheritance Based on slides by Alyssa Harding"

Similar presentations


Ads by Google