Eu sugiro voltar alguns passos e entender o que é uma declaração de método. No caso, temos:
public BufferedImage getSpriteSheet(int x, int y, int width, int height) {
return spritesheet.getSubimage(x,y, width, height);
}
Vamos ver apenas a primeira linha:
/‾‾‾ modificador de acesso
|
| /‾‾ Retorno do método
| |
public BufferedImage getSpriteSheet(int x, int y, int width, int height)
| |
| \__Lista de parâmetros
|
\__ Nome do método
Então temos que:
-
public
é o modificador de acesso (o método pode ser acessado de qualquer lugar)
-
BufferedImage
é o tipo de retorno do método. Ou seja, ele tem que retornar algum objeto cujo tipo seja BufferedImage
(em algum lugar vai ter um return algumaCoisa
, sendo que algumaCoisa
é qualquer expressão cujo resultado é um BufferedImage
)
-
getSpriteSheet
é o nome do método
-
int x, int y, etc
é a lista de parâmetros (no caso, são 4 números inteiros, ou seja, ao chamar o método, você terá que passar esses 4 valores para ele)
A declaração do método diz o que ele faz (recebe 4 inteiros e devolve/retorna um BufferedImage
). Dentro do corpo do método, temos como ele faz isso: o que ele fez com esses 4 números que passamos? Como ele usa esses valores para construir o BufferedImage
?
No caso, o “como” é simples: ele repassa os valores para spritesheet
(que é um objeto do tipo BufferedImage
, que por sua vez possui o método getSubimage
).
Se esse BufferedImage
for do AWT, dá para ver na documentação que o método getSubimage
recebe 4 inteiros e retorna um BufferedImage
. Por isso que ao fazer:
return spritesheet.getSubimage(x, y, width, height);
Estou dizendo: vou retornar o valor que spritesheet.getSubimage
retorna (que por sinal, é um BufferedImage
, o que é condizente com a assinatura do método).
Ou seja, o método getSpriteSheet
retorna um BufferedImage
, mas como ele faz isso? Em vez dele mesmo construir um “na mão”, ele repassa para alguém que já sabe fazer isso (no caso, o spritesheet
). Então ele chama spritesheet.getSubimage
, e o valor que esse método retorna é retornado diretamente.
Talvez se o método fosse assim, ficasse mais claro para você:
public BufferedImage getSpriteSheet(int x, int y, int width, int height) {
BufferedImage subimage = spritesheet.getSubimage(x,y, width, height);
return subimage;
}
Ou seja, ele chama spritesheet.getSubimage
e pega o valor retornado por este método. Em seguida retorna este valor (já que ele é um BufferedImage
, ou seja, exatamente o tipo que getSpriteSheet
precisa retornar).
Mas neste caso a variável subimage
não está servindo para muita coisa, então posso eliminá-la e retornar diretamente o valor retornado por spritesheet.getSubimage
.
O fato do método “ser um getter” (só porque o nome começa com “get”) é circunstancial, pois o que está dito acima vale para qualquer método, independente do seu nome. Na verdade, ele nem seria um getter de fato (se considerarmos a definição “clássica” do Java Beans), mas enfim: ele é um método que retorna algo, mas em vez dele fazer tudo, ele simplesmente delega para outra classe que já sabe como fazer, e retorna o resultado desta.
Sobre getters, leitura complementar: aqui e aqui.