Objektide kogumid

Objektide kogumite deklareerimine

Kogumi deklareerimisel peab ära määrama, mis klassi objekte seal kogumis hoitakse.

Võtame näiteks klassid Shape, Circle, Rectangle ja Square.

public class Shape
public class Circle extends Shape
public class Rectangle extends Shape
public class Square extends Rectangle

Kogumis saab hoida objekte, mis on kas määratud klassi objektid või siis selle määratud klassi alamklassi (või alamklassi alamklassi jne) objektid.

Näiteks kui teha järjend listOfShapes:

ArrayList<Shape> listOfShapes = new ArrayList<>();

Antud listis saab hoida Shape, Circle, Rectangle või Square tüüpi objekte.

Kui teha järjend listOfRectangles:

ArrayList<Rectangle> listOfRectangles = new Arraylist<>();

Antud järjendis saab hoida kas Rectangle või Square tüüpi objekte, aga mitte Shape ega Circle.

Kui ei taha järjendile kindlat objektitüüpi määrata, saab selleks määrata lihtsalt Object, kuna kõik teised klassid on Object klassi alamklassid.

ArrayList<Object> listOfObjects = new ArrayList<>();

Analoogiliselt saab teha ka teisi objektide kogumeid.

Antud klassidel on selline hierarhia:

../_images/class_hierarchy.png

Objekti tüübi tuvastamine

Kui hoiad kogumis erinevat tüüpi objekte, võib tekkida vajadus objektide tüüpe tuvastada. Selleks saab kasutada meetodit getClass või operaatorit instanceof.

getClass meetod tagastab antud objekti klassi.

instanceof kontrollib, kas objekt on mingit kindla klassi objekt, ja tagastab booleani.

getClass näide:

Rectangle rec = new Rectangle();
System.out.println(rec.getClass());

Mis prindib konsooli

class Rectangle

instanceof näide:

Rectangle rec = new Rectangle();
boolean numInstance1 = rec instanceof Rectangle;
boolean numInstance2 = rec instanceof Shape;
boolean numInstance3 = rec instanceof Circle;

System.out.println(numIstance1);
System.out.println(numIstance2);

if (rec instanceof Rectangle) {
    System.out.println("rec is a rectangle");
}

Mis prindib konsooli:

true
true
false
rec is a rectangle