Presentation is loading. Please wait.

Presentation is loading. Please wait.

OOP in Java : © W. Milner 2005 : Slide 1 Java and OOP Part 3 – Extending classes.

Similar presentations


Presentation on theme: "OOP in Java : © W. Milner 2005 : Slide 1 Java and OOP Part 3 – Extending classes."— Presentation transcript:

1 OOP in Java : © W. Milner 2005 : Slide 1 Java and OOP Part 3 – Extending classes

2 OOP in Java : © W. Milner 2005 : Slide 2 Inheritance  Suppose we want a version of an existing class, which is slightly different from it.  We want to avoid starting again from scratch  We can define the new class to be a sub-class of the first class.

3 OOP in Java : © W. Milner 2005 : Slide 3 Terms used  The original class is called the base class, the ancestor class or the super class  The process of designing the sub-class from the base class is called 'sub-classing' the base class

4 OOP in Java : © W. Milner 2005 : Slide 4 Sub-classing  The subclass inherits all members and methods of the first  where needed we can write new versions of inherited methods – which replace the old method  we can add extra members and methods  You can’t ‘loose’ a member or method  No limit to levels of inheritance

5 OOP in Java : © W. Milner 2005 : Slide 5 Example  Common type of sub-classing is specialization  Suppose we want a type of product which is perishable  When we deliver new stock, we throw away old stock – not add to it  First review the Product class:

6 OOP in Java : © W. Milner 2005 : Slide 6 Product class definition public class Product { public Product() { lastBarcodeUsed++; barcode=lastBarcodeUsed; stockLevel=100; } public Product(int initStock) { lastBarcodeUsed++; barcode=lastBarcodeUsed; stockLevel=initStock; } public static int count() { return lastBarcodeUsed; } public void display() { System.out.println("Barcode = "+barcode); System.out.println("Stocklevel = "+stockLevel); System.out.println("========================="); }

7 OOP in Java : © W. Milner 2005 : Slide 7 Rest of Product public boolean needMore() { if (stockLevel==0) return true; else return false; } public void sell(int howMany) { stockLevel-=howMany; if (stockLevel<0) stockLevel=0; } public void deliver(int howMany) { if (howMany<0) { System.out.println("Invalid delivery"); return; } else stockLevel+=howMany; } public int getStockLevel() { return stockLevel; } private static int lastBarcodeUsed=0; private int barcode; protected int stockLevel; }

8 OOP in Java : © W. Milner 2005 : Slide 8 Implementation of Perishable public class Perishable extends Product { public void deliver(int howMany) { stockLevel=howMany; }

9 OOP in Java : © W. Milner 2005 : Slide 9 Protected  Problem – the deliver method in Perishable references the private field stockLevel – not allowed  Solution – use access control modifier protected  Excerpt from modified Product definition –.. private static int lastBarcodeUsed=0; private int barcode; protected int stockLevel; }

10 OOP in Java : © W. Milner 2005 : Slide 10 Using the subclass public class First { public static void main(String[] args) { Product prod = new Product(); prod.deliver(100); Perishable perish1 = new Perishable(); Perishable perish2 = new Perishable(); perish1.deliver(50); perish2.deliver(60); prod.display(); perish1.display(); perish2.display();} } All 3 use default constructor =stocklevel 100 Barcode = 1 Stocklevel = 200 ==================== Barcode = 2 Stocklevel = 50 ==================== Barcode = 3 Stocklevel = 60 ====================

11 OOP in Java : © W. Milner 2005 : Slide 11 Constructors of sub-classes  Constructors are not methods  They are not inherited  If you don't define one – the no-arg constructor of the base class is called for you – see last example

12 OOP in Java : © W. Milner 2005 : Slide 12 super()  super(); can be used as the first statement in a constructor  It means the corresponding superclass constructor is called  Further statements can take further action  For example..suppose Perishable products have an extra store location code..

13 OOP in Java : © W. Milner 2005 : Slide 13 Using super() public Perishable(int initStock, int initLocationCode) { super(initStock); locationCode = initLocationCode; } public Product(int initStockLevel) { barcode=lastBarcodeUsed++; stockLevel=initStockLevel; }

14 OOP in Java : © W. Milner 2005 : Slide 14 More on super()  super() cannot be anywhere except the first line of a constructor  If you don’t use super(), the system executes it anyway  IOW a subclass constructor first executes the no-arg constructor of the super class

15 OOP in Java : © W. Milner 2005 : Slide 15 Exercise  Define an Employee class, with fields payrollNumber and rateOfPay  Define a Manager class as a sub-class of Employee. They are paid monthly – define their pay() method to display their pay  Define a Clerical class as a sub-class of Employee. They are hourly paid. Add an hoursWorked field, and a pay() method.

16 OOP in Java : © W. Milner 2005 : Slide 16 Object  All classes descend from the class Object  public class MyClass.. Is in effect:  public class MyClass extends Object..  While if you say  public class MyClass extends MySuperClass  Then MySuperClass, or its ancestor, descends from Object  Object objects have few useful methods  Except toString(), which converts the object to a descriptive string  Which is what System.out.println calls  For example..

17 OOP in Java : © W. Milner 2005 : Slide 17 Object example Object someObject= new Object(); System.out.println(someObject); Output: java.lang.Object@187c6c7

18 OOP in Java : © W. Milner 2005 : Slide 18 Changing and using toString In Perishable definition.... public String toString() { return "Perishable ID="+barcode+" Loc="+locationCode+" stock="+stockLevel; }.. Output: Perishable ID=0 Loc=30 stock=20 Perishable ID=1 Loc=45 stock=20 in use.. Perishable p1 = new Perishable(20,30); Perishable p2 = new Perishable(20,45); System.out.println(p1); System.out.println(p2); calls toString() of Perishable objects

19 OOP in Java : © W. Milner 2005 : Slide 19 final methods  A method declared as final in a superclass cannot be altered in a subclass  For example..

20 OOP in Java : © W. Milner 2005 : Slide 20 Defining a method as final In Product.. public final void display() { System.out.println("Barcode = "+barcode); System.out.println("Stocklevel = "+stockLevel); System.out.println("========================="); } In Perishable.. public void display() {.. } In use: Perishable p1 = new Perishable(20,30); Output on next slide

21 OOP in Java : © W. Milner 2005 : Slide 21 Trying to override final - compile time error C:\Walter\JavaProgs\Perishable.java:19: display() in Perishable cannot override display() in Product; overridden method is final public void display() ^ 1 error

22 OOP in Java : © W. Milner 2005 : Slide 22 Final classes – and why  A class declared as final cannot be subclassed  Methods and classes are usually declared as final for security  Otherwise – a subclass of a standard superclass might be defined, with..  Unpleasant overridden methods  But at run-time a subclass object would look like the superclass  Eg the String class is final for this reason

23 OOP in Java : © W. Milner 2005 : Slide 23 Abstract classes  Superclasses which are 'general' can be declared abstract  Used when subclasses will all implement the same method – in different ways, but  The superclass is too general to actually implement the method itself  For example..

24 OOP in Java : © W. Milner 2005 : Slide 24 Example abstract class  Suppose we had a superclass called Shape  And subclasses called Triangle, Rectangle, Square and so on.  Each would need a draw method  But we could not program the draw method of a Shape instance  So the draw method of Shape is declared abstract  As is the class as a whole  This means Shape cannot be instantiated

25 OOP in Java : © W. Milner 2005 : Slide 25 Example abstract class public abstract class Shape { public Shape(int initHeight, int initWidth) { width=initWidth; height=initHeight; } public abstract void draw(); protected int width; protected int height; }

26 OOP in Java : © W. Milner 2005 : Slide 26 Subclass of abstract class public class Rectangle extends Shape { public Rectangle(int h, int w) { super(h,w); } public void draw() { for (int i=0; i<height; i++) { for (int j=0; j<width; j++) System.out.print("*"); System.out.println(); }

27 OOP in Java : © W. Milner 2005 : Slide 27 Using the subclass Rectangle r = new Rectangle(4,5); r.draw();

28 OOP in Java : © W. Milner 2005 : Slide 28 Exercise  Copy the Shape class  Define a Triangle class by subclassing Shape – define the draw method  How would you deal with a Square class?


Download ppt "OOP in Java : © W. Milner 2005 : Slide 1 Java and OOP Part 3 – Extending classes."

Similar presentations


Ads by Google