Evaluation steps:

Data: new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).size()

The method size in class Unknown:
  int size() {
    return 0;
  }

The method size in class Person:
  int size() {
    return 1 + this.father.size() + this.mother.size();
  }

The steps: (when preforming these steps, you may temporarily name some of the inner portions (such as George and Emma))
 

new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).size()

The call

return 1 + new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).father.size()
             + new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Substituted the Person( "Fred"...) in for this

return 1 + new Person("George",new Unknown(),new Unknown()).size
             + new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Extracted the father from Person( "Fred" )


return 1 +
return 1 + new Person( "George", new Unknown(),new Unknown()).father.size()
              + new Person("George", new Unknown(),new Unknown()).mother.size()

+ new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Called size on Person("George"), substituted Person("George") in for this


return 1 +
return 1 + new Unknown().size()
              + new Person("George", new Unknown(),new Unknown()).mother.size()

+ new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Extracted the father from Person("George")


return 1 +
return 1 +
return 0

+ new Person("George", new Unknown(),new Unknown()).mother.size()

+ new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Called size on Unknown


return 1 +
return 1 +  0

+ new Unknown().size()

+ new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Extratcted the mother from Person("George")


return 1 +
return 1 + 0
return 0

+ new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Called size on Unknown


return 1 +
return 1 + 0 + 0


+ new Person( "Fred", new Person("George", new Unknown(), new Unknown()),
                                           new Person( "Emma",new Unknown(), new Unknown()) ).mother.size()

Finished call to size on Person("George")

return 1 + 1
              + new Person("Emma", new Unknown(),new Unknown()).size()

Extracted mother from Person("George")


return 1 + 1 +
return 1 + new Person( "Emma", new Unknown(),new Unknown()).father.size()
              + new Person("Emma", new Unknown(),new Unknown()).mother.size()

Called size on Person("Emma"), substituted Person("Emma" for this


return 1 + 1 +
return 1 +  new Unknown().size()
              + new Person("Emma", new Unknown(),new Unknown()).mother.size()

Extracted father from Person("Emma")


return 1 + 1 +
return 1 +
return 0

+ new Person("Emma", new Unknown(),new Unknown()).mother.size()

Called size on Unknown


return 1 + 1 +
return 1 +  0

+ new Unknown().size()

Extracted mother from Person("Emma")


return 1 + 1 +
return 1 + 0 +
return 0

Called size on Unknown

return 1 + 1 + 1

Finished calling size on Person("Emma")

return 3

Perform additions

3

Finished