Pessoal, estou com uma dúvida, segue o programa:
public class Date
{
private int month; // 1-12
private int day; // 1-31 conforme o mês
private int year; // qualquer ano
// construtor: chama checkMonth para confirmar o valor adequado para month;
// chama checkDay para confirmar o valor adequado para day
public Date( int theMonth, int theDay, int theYear )
{
month = checkMonth( theMonth ); // valida month
year = theYear; // poderia validar year
day = checkDay( theDay ); // valida day
System.out.printf(
"Date object constructor for date %s\n", this );
} // fim do construtor Date
// método utilitário para confirmar o valor adequado de month
private int checkMonth( int testMonth )
{
if ( testMonth > 0 && testMonth <= 12 ) // valida month
return testMonth;
else // month é inválido
{
System.out.printf(
"Invalid month (%d) set to 1.", testMonth );
return 1; // mantém objeto em estado consistente
} // fim de else
} // fim do método checkMonth
// método utilitário para confirmar o valor adequado de day com base em month e year
private int checkDay( int testDay )
{
int daysPerMonth[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// verifica se day está no intervalo para month
if ( testDay > 0 && testDay <= daysPerMonth[ month ] )
return testDay;
// verifica ano bissexto
if ( month == 2 && testDay == 29 && ( year % 400 == 0 ||
( year % 4 == 0 && year % 100 != 0 ) ) )
return testDay;
System.out.printf( "Invalid day (%d) set to 1.", testDay );
return 1; // mantém objeto em estado consistente
} // fim do método checkDay
// retorna uma String no formato mês/dia/ano
public String toString()
{
return String.format( "%d/%d/%d", month, day, year );
} // fim do método toString
} // fim da classe Date
public class Employee
{
private String firstName;
private String lastName;
private Date birthDate;
private Date hireDate;
// construtor para inicializar nome, data de nascimento e data de contratação
public Employee( String first, String last, Date dateOfBirth,
Date dateOfHire )
{
firstName = first;
lastName = last;
birthDate = dateOfBirth;
hireDate = dateOfHire;
} // fim do construtor Employee
// converte Employee em formato de String
public String toString()
{
return String.format( "%s, %s Hired: %s Birthday: %s",
lastName, firstName, hireDate, birthDate );
} // fim do método toString
} // fim da classe Employee
public class EmployeeTest
{
public static void main( String args[] )
{
Date birth = new Date( 7, 24, 1949 );
Date hire = new Date( 3, 12, 1988 );
Employee employee = new Employee( "Bob", "Blue", birth, hire );
System.out.println( employee );
} // fim de main
} // fim da classe EmployeeTest
no EmployeeTest, quando eu crio o objeto birth, ele chama o construtor, aí no contrutor de date tem um printf com o this, eu não entendi pq o this chama o método toString() da classe date? Eu vi que se deixar sem o método ele imprime lixo.
Outra dúvida é a seguinte, quando eu dou o System.out.println( employee ), ele chama o método toString de Employee, eu tbm não entendi o pq, já que seria a mesma coisa que se eu colocasse employee.toString();
Se puderem me ajudar eu agradeceria.