Algumas falhas do que você está fazendo:
O correto é:
null e “NULL” e NULL são coisas completamente diferentes. O primeiro você indica que nome aponta para null, o segundo é um texto escrito NULL e o terceiro é um erro de compilação (caso não exista nenhuma variável chamada NULL).
Você está confundindo set com getter.
Set serve para passar um valor a um atributo de uma classe. Exemplo:
class Animal {
private String nome;
private String raca;
public String getNome() { //isso é um getter
return nome;
}
public void setNome(String nome) { //isso é um setter
this.nome = nome;
}
public String getRaca() { //isso é um getter
return raca;
}
public void setRaca(String raca) { //isso é um setter
this.raca = raca;
}
}
Você declarou sua variável dia como int e atribuiu a ela um String no segundo construtor. 27 e “27” são duas coisas completamente diferentes. O primeiro é um inteiro, o segundo uma String, da forma que está gerará um erro de compilação.
Falando nisso, seu segundo construtor também está muito errado. Você passa 3 parâmetros para ele mas nunca os usa. O correto é:
public Animal(String nome, String raça, int dia) //o public não é obrigatório a não ser que você queira poder usar esse construtor em outros pacotes
{
this.nome = nome;
this.raça = raca;
this.dia = dia;
}
E o último erro:
public class Animal
{
protected String nome;
protected String raça;
protected int dia = obj.setVacinar; //erro de compilação, não existe nenhuma variável chamada obj
Você também invocou o metodo errado e de forma errada. Como eu disse, metodos SEMPRE terão parenteses ().