Cara, o uso do this dentro da classe é opcional.
O Java trabalha com refeências para objetos, não com os objetos em si. Śão na verdade endereços de memória onde os objetos estão realmetne alocados (como ponteiros em C, C++, etc).
O this é uma referência para o objeto atual, para o qual você está escrevendo o código naquele momento. Assim, esta era a maneira de acessar algum argumento da classe dentro dos métodos. Mas hoje em dia o uso do this é opcional. No exemplo que você postou, o this poderia ser omitido que funcionaria sem problema.
public class Test {
private String testString = "string declarada na classe";
public void printTest() {
String testString = "string declarada no método";
System.out.println( this.testString );
System.out.println( testString );
}
public static void main( String[] args ) {
new Test().printTest();
}
}
Apesar de ambas as variáveis terem o mesmo nome, “testString”, ao usar “this” está referindo-se à variável da classe, sem o “this” está referindo-se à variável declarada no método.
Ah, agora que eu vi o ponto do código que você perguntou! Foi mal!
Ali, você está usando a segunda versão do construtor da classe, que recebe um objeto da mesma classe MyDate2 e cria um novo objeto com extamente os mesmo atributos, isso é, uma cópia!
Se vc chama
MyDate2 newDate = new MyDate2(this);
o que está fazendo é passando o objeto atual para o construtor de cópia
Neste caso o this não poderia ser omitido pois é um argumento para se construir um outro objeto.
O que aconteceu naquele momento é mais ou menos assim: “Construa um outro objeto MyDate2 onde a data que ele conterá será igual mim.(no caso o this)”.
Ou seja, o objeto que está executando aquela linha de código(this) será o mesmo objeto que será enviado para o construtor que recebe um MyDate2.
Imagine uma classe pessoa e outra classe carro. Um carro tem um dono. Imagine que na classe pessoa haja um método criar carro, passando um dono como parâmetro.
Se vc fizer: Carro c = new Carro(“Zé mané”), o dono do carro é o zé mané.
Se vc fizer: Carro c = new Carro(this.getNome()), o dono do carro é a pessoa que estiver sendo representada pelo objeto no momento(this). Para um objeto com o nome de Joana, o dono vai ser a joana, para um objeto com nome de Pedro, o dono vai ser o pedro…