12
respostas

Como acessar outras classes java

Quando vou percorrer outras classes, eu posso acessar diretamente os métodos ou tenho que instanciar cada classe primeiramente. Poderiam me explicar como funciona ou indicar algum site que exemplifique, por favor? Por exemplo: ClasseA a = new ClasseA(); a.getMetodoClasseB.getMetodoClasseC.setClasseD("aaaa");

Obrigado!

12 respostas

Os únicos métodos que podem ser invocados sem a instancia de uma classe são os métodos estáticos.

Os demais precisam de uma instância.

Olá Gabriel,

No exemplo : ClasseA a = new ClasseA(); a.getMetodoClasseB.getMetodoClasseC.setClasseD("aaaa");

A classeA consigo instanciar normalmente. Como posso instanciar a classe B e C da forma direta e indireta?

Fiquei um pouco confuso quanto a sua pergunta, mas acho que você quer dizer que tem 4 classes diferentes aí:

ClasseA ClasseB ClasseC ClasseD

Você pode acessar qualquer métodos das classes desde que eles tenham uma relação através de herança.

Por exemplo:

classe ClasseD {
  metodoD() {...}
}
classe ClasseC herda ClasseD {
  metodoC() {...}
}
classe ClasseB herda ClasseC {
   metodoB() {...}
}
classe ClasseA herda ClasseB {
   metodoA() {...}
}

Nesse caso, você pode instanciar uma ClasseA e acessar o método da ClasseD sem precisar instanciar a ClasseD:


var objetoA = new ClasseA()
var objetoA.metodoD()

Note que é possível acessar os métodos e atributos de ClasseD pois o ClasseA herda dele, mas o inverso não é verdade. Apenas o filho pode acessar os atributos e métodos do pai.

Boa Noite Arthur e Gabriel,

Primeiramente muito obrigado!

Arthur, entendi sua explicação anterior. Mas se no caso fossem classes(A, B, C, D) isoladas, sem herança? Teria que instanciar cada uma delas para acessar seus métodos?

Se as classes não tiverem nenhum tipo de relacionamento entre elas, não é possível uma acessar os atributos da outra.

Então sim, é preciso instanciar um objeto de cada classe com o qual você quer trabalhar.

Mas, se os métodos forem estáticos as classes não precisam ser instanciadas. Neste caso, os métodos podem ser chamados pela classe sem necessidade de uma instância.

Olá Arthur,

As classes não tem nenhum tipo de relacionamento, então teria que instanciar o objeto para cada classe. Como faço isso no exemplo abaixo?

ClasseA a = new ClasseA(); a.getMetodoClasseB.getMetodoClasseC.setClasseD("aaaa");

vc quer dizer uso de composição?

se for a resposta é sim, para vc acessar o método da "ClasseC" vc precisa que a "ClasseB" e "ClasseC" ja estejam instanciados, caso estes não estejam ocorrerá o erro "nullpointerException".

mas ja tocando no assunto não é uma boa pratica vc fazer esse tipo de chamada, deixa o código muito acoplado.

se quiser saber mais sobre esse principio da uma olhada no curso SOILD aqui no alura, é muito bom!!!!!

vc quer dizer uso de composição?

se for a resposta é sim, para vc acessar o método da "ClasseC" vc precisa que a "ClasseB" e "ClasseC" ja estejam instanciados, caso estes não estejam ocorrerá o erro "nullpointerException".

OBS: não sei pq duplicou meu post

Olá Allan,

Você comentou que o código muito acoplado. Como você faria para acessar o método da "ClasseC" ?

cara, pra te ajudar nesse quesito eu precisaria saber exatamente o q vc esta fazendo pois cada caso é um caso.

nesse caso vc esta indo "muito a fundo" na chamada do método, talvez isso não seja realmente necessário, talvez a modelagem deva ser um pouco diferente, como falei cada caso é um caso.

no geral pra esse tipo de coisa ocorre mais no seguinte nivel:

filme.getDiretor().getNome();

no exemplo a cima para resolver o acoplamento eu criaria um metodo getNomeDiretor() na classe filme que ja retornaria "diretor().getNome()", assim caso sua classe diretor mudasse vc só precisaria alterar esse método e não todos os lugares que buscassem o nome do diretor através da classe Filme.

mas como falei cada caso é um caso.

de toda a forma recomendo o curso SOILD q é muito bom, o de UML tb.

aconselho a dar uma olhada na sua estrutura de classes da mesma forma.