[RESOLVIDO] Efeito inesperado em método

Fala galera, tow com um problema e gostaria da ajuda de vocês, estou com uma classe abstrata chamada Empregado onde tenho várias classes concretas que herdam dela,
também tenho uma classe chamada Data onde cada Empregado tem uma data de Nascimento. Tenho outros métodos em Empregado, mas uma coisa que não estou conseguindo
enxergar o erro é no método da classe Data checkDay que recebe um inteiro como parâmetro, o resultado não está correto de acordo com a lógica do método, gostaria que
vocês dessem uma olhada e se alguém ver onde estou errando comentar, acredito que o if de checkDay não está sendo obedecido. Desde já agradeço.

Classe Data

public class Data {

	private int mes;
	private int dia;
	private int ano;
	
	public Data (int oDia, int oMes, int oAno){
		dia = checkDay(oDia);
		mes = checkMes(oMes);
		ano = oAno;
	}
	
	//gets and sets
	public int getMes() {
		return mes;
	}
	public void setMes(int mes) {
		this.mes = mes;
	}
	public int getDia() {
		return dia;
	}
	public void setDia(int dia) {
		this.dia = dia;
	}
	public int getAno() {
		return ano;
	}
	public void setAno(int ano) {
		this.ano = ano;
	}
	//end gets end sets
    
	//metodo valida mes
	private int checkMes(int testeMes){
		if(testeMes > 0 && testeMes < 12){
			return testeMes;
		}
		else{
			System.out.printf("Mes invalido (%d) set para 1.", testeMes);
			return 1;
		}
	}
	//end metodo valida mes
	
	private int checkDay(int testeDia){
		
		int[] diasPorMes = {0,31,28,31,30,31,30,31,31,30,31,30,31};
		
		if((testeDia > 0) && (testeDia <= diasPorMes[mes])){
			return testeDia;
		}
		else{
			System.out.printf("Dia invalido!");
			return 0;
		}
	}//end checkDay
	
	public String toString(){
		return String.format("%d/%d/%d", dia, mes, ano);
	}
}

Classe abstrata Empregado

public abstract class Empregado {

	private String nome;
	private String sobreNome;
	private String numeroSeguroSocial;
	private Data dataNascimento;

	public Empregado(String first, String last, String ssn, int dia, int mes,
			int ano) {
		nome = first;
		sobreNome = last;
		numeroSeguroSocial = ssn;
		dataNascimento = new Data(dia, mes, ano);

	}

	// gets and sets
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobreNome() {
		return sobreNome;
	}

	public void setSobreNome(String sobreNome) {
		this.sobreNome = sobreNome;
	}

	public String getNumeroSeguroSocial() {
		return numeroSeguroSocial;
	}

	public void setNumeroSeguroSocial(String numeroSeguroSocial) {
		this.numeroSeguroSocial = numeroSeguroSocial;
	}

	// end gets and sets

	public String toString() {
		return String.format("%s %s\n%s: %s %s: %d/%d/%d", getNome(),
				getSobreNome(), "Numero de Seguro Social",
				getNumeroSeguroSocial(), "\nData de Nascimento",
				dataNascimento.getDia(), dataNascimento.getMes(),
				dataNascimento.getAno());
	}

	public abstract double ganhos();
}

Classe concreta EmpregadoComissao

public class EmpregadoComissao extends Empregado {

	private double vendasSemanais;
	private double taxaComissao;

	public EmpregadoComissao(String first, String last, String ssn,int dia, int mes, int ano,
			double vendas, double taxa) {
		super(first, last, ssn, dia, mes, ano);
		setVendasSemanais(vendas);
		setTaxaComissao(taxa);
	}

	// gets and sets
	public double getVendasSemanais() {
		return vendasSemanais;
	}

	public void setVendasSemanais(double vendas) {
		vendasSemanais = (vendas < 0.0) ? 0.0 : vendas;
	}

	public double getTaxaComissao() {
		return taxaComissao;
	}

	public void setTaxaComissao(double taxa) {
		taxaComissao = (taxa > 0.0 && taxa < 1.0) ? taxa : 0.0;
	}

	// end gets and sets

	@Override
	public double ganhos() {

		return getVendasSemanais() * getTaxaComissao();
	}

	public String toString() {
		return String.format("%s %s\n%s: %.2f;\n%s: %.2f;",
				"Empregado de Comissao:",super.toString(),"Vendas Semanais",
				getVendasSemanais(),"Taxa de Comissao",getTaxaComissao());
	}

}

Veja que ao chamar o método no construtor você esta checando o dia antes de definir o mês

private int checkDay(int testeDia){  
          
        int[] diasPorMes = {0,31,28,31,30,31,30,31,31,30,31,30,31};  
          
        if((testeDia > 0) && (testeDia <= diasPorMes[mes])){//<--aqui  o mês ainda não foi definido
            return testeDia;  
        }  
        else{  
            System.out.printf("Dia invalido!");  
            return 0;  
        }  
    }//end checkDay 

obrigado brow!!

Sem problemas, mas e o sujeito que nasceu em 29 de fevereiro de 1988 tem vaga nessa empresa não?

Lembre-se de por uma logica para identificar anos bissextos nessa classe Data também.

public class Data {

	private int mes;
	private int dia;
	private int ano;
	
	public Data (int oDia, int oMes, int oAno){
		mes = checkMes(oMes);
		dia = checkDay(oDia);
		ano = oAno;
	}
	
	//gets and sets
	public int getMes() {
		return mes;
	}
	public void setMes(int mes) {
		this.mes = mes;
	}
	public int getDia() {
		return dia;
	}
	public void setDia(int dia) {
		this.dia = dia;
	}
	public int getAno() {
		return ano;
	}
	public void setAno(int ano) {
		this.ano = ano;
	}
	//end gets end sets
    
	//metodo valida mes
	private int checkMes(int testeMes){
		if(testeMes > 0 && testeMes < 12){
			return testeMes;
		}
		else{
			System.out.printf("Mes invalido (%d) set para 1.", testeMes);
			return 1;
		}
	}
	//end metodo valida mes
	
	private int checkDay(int testeDia){
		
		int[] diasPorMes = {0,31,28,31,30,31,30,31,31,30,31,30,31};
		
		if((testeDia > 0) && (testeDia <= diasPorMes[mes])){
			return testeDia;
		}
		if (mes ==2 && testeDia == 29 && (ano % 400 == 0 ||(ano % 4 == 0 && ano % 100 != 0)))
			System.out.printf("Dia (%d) invalido! set para 1.", testeDia);
			return 1;
		
	}//end checkDay
	
	public String toString(){
		return String.format("%d/%d/%d", dia, mes, ano);
	}
}

Acredito que com essa versão é resolvido isso certo?. Valeu aí

Isso mesmo, porém, você caiu no mesmo erro do código anterior ao usar uma variável(ano) antes dela ser definida.

tendi