Hi all, I'm trying to understand the logic on creating object and would appreciate it if someone can offer a clear explanation on the following example. My question is on line 24 & 25. From what I understand, this is using user-defined data type, BodyPart and assigning the return value of robotFirst.attack() method, making the variable attacked to store the reference to the method. I think the class BodyPart is used as the data type because AbstractRobot is an abstract class(therefore, can't create an object of it), and because it seems logical that the BodyPart should be the class as the methods are about being attacked & defend. Isn't it true that however, if we had more classes that are not abstract, we could use any other classes, or actually use any interfaces as the reference type? Is there some more concrete method/reason for using BodyPart as the user-defined data type here? If anyone has any clear answer to this (not just an opinion), I'd appreciate it very much. Happy coding! :)