Search code examples
javascjp

calling methods using object reference variable


I read an example of serialization in the SCJP book . Below i have posted that example source code

import java.io.*;
public class SerializeDog {
    public static void main(String[] args) {
        Collar c = new Collar(3);
        Dog d = new Dog(c, 5);
        System.out.println("before: collar size is "+ d.getCollar().getCollarSize());
        try {
            FileOutputStream fs = new FileOutputStream("testSer.ser"); 
            ObjectOutputStream os = new ObjectOutputStream(fs);
            os.writeObject(d);
            os.close();
        }catch (Exception e) { 
            e.printStackTrace(); 
        }
        try {
            FileInputStream fis = new FileInputStream("testSer.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            d = (Dog) ois.readObject();
            ois.close();
        } catch (Exception e) { 
            e.printStackTrace(); 
        }
        System.out.println("after: collar size is "**+ d.getCollar().getCollarSize());**
    }
}

class Dog implements Serializable {
    private Collar theCollar;
    private int dogSize;
    public Dog(Collar collar, int size) {
        theCollar = collar;
        dogSize = size;
    }
    public Collar getCollar() { 
        return theCollar; 
    }
}

class Collar implements Serializable {
    private int collarSize;
    public Collar(int size) { 
        collarSize = size; 
    }
    public int getCollarSize() { 
        return collarSize; 
    }
}

i want to know when we call d.getCollar().getCollarSize();which method gets executed... and please explain what kind of method calling is this in java. how can we use two methods like this.


Solution

  • i want to know when we call d.getCollar().getCollarSize(); which method gets executed...

    JAVA invoke/execute gettCollar() on object d, and returns a instance of Color. getCollarSize() will be invoked on Collar instance returned by d.getColor() method.

    This is how, we chain the method invocation.

    You can split the method call into two steps

    Collar collar = d.getCollar();
    int collarSize = co.getCollarSize();