Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java and OOP Part 5 – More.

Similar presentations


Presentation on theme: "Java and OOP Part 5 – More."— 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 π = ; Also note you can use Unicode in source code

4 field1 of the object carrying out someMethod
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);
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 c1 object c2 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 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 Using Class objects

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


Download ppt "Java and OOP Part 5 – More."

Similar presentations


Ads by Google