1 / 31

Java and OOP

Java and OOP. Part 5 – More. More OOP. More OOP concepts beyond the introduction: constants this clone and equals inheritance exceptions reflection interfaces. Constants. final is used for classes which cannot be sub-classed Data members can also be declared final

jacquiec
Download Presentation

Java and OOP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java and OOP Part 5 – More

  2. More OOP • More OOP concepts beyond the introduction: • constants • this • clone and equals • inheritance • exceptions • reflection • interfaces

  3. Constants • final is used for classes which cannot be sub-classed • Data members can also be declared final • Which means they are constants – for example • public final double π = 3.1415926; • Also note you can use Unicode in source code

  4. this • Keyword this is a reference to the object executing the current method • Usually this can be omitted public void someMethod() { field1=99; field2=32; } field1 of the object carrying out someMethod We could have said this.field1=99;

  5. Example of this public void putInQueue() { q.add(this); } This might be a method to place an object in a queue. The queue has a method add, and we need to pass to it a reference to the object to be added to the queue

  6. Exercise • Set up code to do the last example. Follow these steps - • Define a Queue class. This holds objects in an array. Have 3 data members - the current size (how many objects currently in the array), a max size, and the array itself. Have a constructor which takes as argument the max size required. Have an add method which adds an object to the array, and a display method • Define a QueueableObject class. It has just one data member - which Queue object it will be stored in. It has just one method - putInQueue • In main(), make 1 Queue. Then make some Queueable objects, add them to the queue, and display the queue.

  7. object = object? • Two distinct questions - • are 2 objects the same? (Do 2 references refer to th esame object) • do 2 objects contain equal data?

  8. Example .equals Integer i1 = new Integer(4); Integer i2=new Integer(4); if (i1.equals(i2)) YES System.out.println("Contain same data"); if (i1 == i2) NO System.out.println("Same object");

  9. Example = Integer i1 = new Integer(4); Integer i2=i1; if (i1.equals(i2)) YES System.out.println("Contain same data"); if (i1 == i2) YES System.out.println("Same object");

  10. Over-riding clone public class CloneableClass { public CloneableClass(int i) { field1=i; } public CloneableClass clone() { CloneableClass newOne = new CloneableClass(field1); return newOne; } private int field1; } CloneableClass c1 = new CloneableClass(9); CloneableClass c2 = c1.clone();

  11. Danger - why is this wrong? public class CloneableClass { public CloneableClass clone() { CloneableClass newOne = new CloneableClass(); newOne.field1=this.field1; return newOne; } public int[] field1 = {1,2,3}; }

  12. Because.. CloneableClass c1 = new CloneableClass(); CloneableClass c2 = c1.clone(); c1.field1[1]=99; System.out.println(c2.field1[1]); // outputs 99 c2 object c1 object same array - we didn't make a new one the field1 array

  13. Exercise • Copy the CloneableClass and fix its clone method

  14. Exceptions • exception = unusual situation • here program cannot execute 'normally' • with a more-or-less external cause • not a program bug • eg file not found • connection with server lost • out of memory • broken Java machine

  15. Exceptions • Some methods are declared to 'throw' an exception • Compiler will insist code 'catches' checked exception • Code form - • try { • .. call of method that may throw ExceptionType • } • catch ( ExceptionType e) • { • .. code to deal with exception • }

  16. Example try catch FileReader fr = null; try { fr= new FileReader("test.dat"); } catch (FileNotFoundException fe) { System.out.println("Cant find file"); } FileReader is in package java.io Note declare fr outside try and initialise Else compiler complains fr may not be initialised

  17. Exercise • A FileReader inherits a method called read • read takes a char[] as argument • Look at the documentation • Extend the code on the last slide to display the file

  18. More on inheritance • Suppose we have a base class called BaseClass, and that SubClass extends this. • What do we get if we say: • BaseClass s = new SubClass();

  19. More on inheritance • Suppose we have a base class called BaseClass, and that SubClass extends this. • What do we get if we say: • BaseClass s = new SubClass(); • Then s is an object which is 'really' a SubClass • But its been declared to be a BaseClass • What happens? • We get the subclass methods, but • The base class fields • For example

  20. Example public class BaseClass { public void method() { System.out.println("Base class method"); } public int field=1;} public class SubClass extends BaseClass { public void method() { System.out.println("Subclass method"); } public int field = 2; } BaseClass s = new SubClass(); s.method(); System.out.println(s.field); outputs: Subclass method 1

  21. Reflection • Sometimes your code must deal with objects when you do not know what type they are • Reflection enables you to ask an object what class it is • A Class object carries info about a class • The Object class has a method called getClass • So all classes have this - eg BaseClass s = new SubClass(); Class theClass= s.getClass(); System.out.println(theClass); .. outputs class test.SubClass (SubClass was defined in package test)

  22. Using Class objects • This example shows how we can trace up a class hierarchy • See the doc of Class for more info • public static void main(String[] args) { • BaseClass s = new SubClass(); • Class theClass= s.getClass(); • upTree(theClass); • } • public static void upTree(Class someClass) • { • if (someClass==null) return; • System.out.println(someClass); • upTree(someClass.getSuperclass()); • } • output: • class test.SubClass • class test.BaseClass • class java.lang.Object

  23. Reflection exercise • Look at the doc of Class • Use Class.forName and .getMethods to output the methods of a given class • Note .forName needs package eg • theClass= Class.forName("java.lang.Class"); • and need to catch exception

  24. No multiple inheritance • In some languages (C++) a class can inherit from more than one super class • Called multiple inheritance • Cannot do it in Java • Idea of interface kind of substitute • Enables a class to 'be like' more than one class interface • Interfaces heavily used in Swing - simpler than what follows..

  25. What is an interface • Like a ghostly class • An interface has a set of methods (names, arguments, return types) • The interface declares but does not define the methods • A class can be declared to implement the interface • It must then define the methods in the interface • Or the compiler will complain • Classes can implement several interfaces

  26. Example interface • Comparable • just one method - • int compareTo(Object obj) • should return negative, 0 or positive depending on whether obj comes before, is =, or comes after

  27. Example implementation public class Order implements Comparable { public Order(double amount, int id, int day, int month, int year) { value=amount; key = id; date=new GregorianCalendar(); date.set(year, month, day); } public int compareTo(Object obj) { Order otherOne = (Order) obj; return date.compareTo(otherOne.date); } private GregorianCalendar date; private double value; private int key; } Calendar implements Comparable

  28. Using a Comparable class Order order1 = new Order(34.50, 1, 2, 1, 2004); Order order2 = new Order(44.50, 2, 1, 1, 2004); System.out.println(order1.compareTo(order2)); get 1 Exercise Copy the Order class Change it so it compares on order value not order date Test it

  29. Variables of interface type • You can declare variables of a type which is interface not a class eg • Comparable someObj; • But you can't refer to any method other than that in the interface • Enables you to write routines which work on any object which implements the interface • So you could write a Sorter class which would sort arrays of any Comparable type (like a template in C++):

  30. Example : the Sorter class public class Sorter { public static void sort(Comparable[] things) { .. .. the sort method.. } } in use.. String[] array = {"ppp", "a", "aaa", "ccc"}; Sorter.sort(array); for (int i = 0; i<array.length; i++) System.out.println(array[i]); output - a aaa ccc ppp

  31. Exercise • Copy the Sorter class • Fill in the sort method eg a bubble sort • Check it works • Check it works with arrays of other Comparable types eg Integer

More Related