Como chamar uma class de outra class

Bom dia, me deparo com esse pequena falta de conhecimento em chamar uma class dentro de outra, meu code logo a baixo.

public class Animal
{   
  public String nome;
  public double peso;
  public double tamanho;

public class Categoria{
    public boolean terrestre;
    public boolean aquatico;
 }
}

public class Console
{
  public static void main(String [] args){
  Animal a = new Animal();
  Categoria c = new Categoria();
  a.nome = "Tigre";
  a.peso = 90.5;
  a.tamanho = 2.3;
  }
}

Provavelmente você tenha que movimentar os getters e setters dessa subclasse contida dentro da classe Animal.

Se eu não me engano seria algo mais ou menos assim:

classePai.getSubClasse().getAtributoSubClasse();

Mas creio que pra usar get e set é preciso que as variáveis sejam private. , ou estou enganado?

Alô, Hazalith. Tudo certo?

Vamos primeiro aqui de conhecimento. Não é correto ter duas classes no mesmo arquivo, salvo necessidade. Por que você não começa criando classes separadas?

Você disse que precisa

Isso “não existe” (bem entre aspas, mas tente imaginar isso. Dê uma olhada depois no que é o static). Você cria um objeto daquela classe e acessa ele, e você faz isso aqui em:

Esses conceitos tem outros nomes, você vai entender o que é um objeto e o que é uma referência e etc, mas só pela didática tô usando os termos mais generalistas

Você pode usar o get/set em variáveis/atributos com QUALQUER tipo de modificador de acesso. Mas você concorda que, se você tem métodos para ler e alterar uma variável/atributo, não faz sentido deixar ele em qualquer visibilidade que não seja privada? Você não vai precisar mexer diretamente no atributo, tem quem faça por você (os métodos get and set).

Foi essa minha linha de raciocínio, realmente não sabia que podia usar com qualquer modificador.

Obrigado :+1:

Poder pode, é um método especial mas é um método, mas não faz sentido.

1 curtida

Eu fiz assim, porem da um erro.

public class Animal
{   
public String nome;
public double peso;
public double tamanho;
Categoria cat ;


public class Categoria{
    public String terrestre;
    public String aquatico;
}
}

public class Console
{
public static void main(String [] args){
Animal a = new Animal();
a.cat.terrestre = "SIm";
a.cat.aquatico = "False";
a.nome = "Tigre";
a.peso = 90.5;
a.tamanho = 2.3;
System.out.println("O animal " + a.nome + " é terrestre: " +
a.cat.terrestre + " aquático: " + a.cat.aquatico + " peso: " +
a.peso + " tamanho: " + a.tamanho);
}
}

Não necessariamente, pode ser com com qualquer modificador de acesso, o @FearX já te deu uma explicação bem legal a respeito.

1 curtida

Isso aí é pq vc chama a classe Categoria dentro da classe Animal mas não tá criando o objeto dela. O que você tá tendo é uma Exception, uma das mais famosas no Java, chamada NullPointerException. Null Pointer Exception é traduzida como Exceção de Ponteiro Nulo, ou seja, você está tentando pegar algum atributo ou algum método de um objeto que é nulo. Sendo nulo, ele não existe, e não existindo, não dá pra usar. Você precisa criar o objeto pra usar.

Criar/instânciar um objeto significa dar um NEW nele. Ou seja, só precisa mudar a linha
Categoria cat
para
Categoria cat = new Categoria();

e você terá o resultado que quer. Mas recomendo que tire sua classe Categoria de dentro da Animal. Faça em outro arquivo e estude Orientação à Objetos! :slight_smile:

1 curtida

Obg pela dica, fiz isso mesmo, coloquei o new e foi de boa, obg mas uma vez, estou iniciando em orientação ao objeto nesse semestre.

1 curtida

Isso aí. Não estude só pela faculdade, você aprende o básico lá. Dá uma olhada nesse tópico que tem umas indicações de cursos legais:

Opa, obg pelo conteúdo, estou estudando pelo livro da caelum e um curso que comprei na udemy. Mas obg pela força e ajuda.

1 curtida