Olá pessoal, resolvi escrever um tutorial para quem ainda tem duvidas sobre a hierarquia de classes em java, e gostaria de agradecer ao pessoal que tem me ajudado muito nos meus projetos, principalmente o Vini-Godoy!!!
Bom, começando… :!:
Uma hierarquia de classes, explicando melhor é um framework, ou seja um sistema mais complexo que uma simples classe, onde cada classe tem seus métodos, e variaveis, e principalmente sua função sobre o sistema.
No meu caso, eu estou criando um jogo de shooter vertical, em java e meu framework se encontra da seguinte maneira:
[code]public class nave extends Graficos implements KeyListener, LoopSteps
{
// corpo da classe
}
public class Graficos extends GameStatus
{
// corpo da classe
}
public class GameStatus extends Teclado
{
// corpo da classe
}
public class Teclado extends Variaveis
{
// corpo da classe
}
public class Variaveis extends Applet
{
// corpo da classe
}[/code]
Como podem notar, a minha hierarquia está gigante, eu poderia fazer o jogo todo em uma só classe, porém o unico problema de fazer em uma unica classe, colocando todos seus metodos nela, é de “morrer afogado no próprio codigo”, ou seja, se perder dentro do seu codigo, no meu caso estou criando uma Engine, ou seja, um projeto de jogo, onde eu poderei alterar futuramente o codigo, e alguns graficos, para criar a versão 2, e 3, e 4, etc, do jogo, podendo até mesmo criar outros jogos já que é um projeto bem organizado em classes.
Cada classe tem sua função:
nave -> Classe principal do jogo, que se encarrega de chamar os metodos correspondentes em outras classes.
Graficos -> Contém os métodos de pintura do jogo, nele estão o paint(), update(), e métodos de desenhar componentes do jogo.
GameStatus -> A thread principal chama o metodo gameStatus() de dentro dessa classe, para obter as ações atuais do jogo. Se a variavel game_status for igual a 0, carrega as imagens, se for igual a 1 exiba tela de entrada, etc.
Teclado -> Contém as ações do teclado, ou seja, se pressionar o botão faça isso, se pressionar o botao faça aquilo.
Variaveis -> Contém todas as variaveis, e seus metodos de inicialização para o sistema todo, além de herdar as funções da classe Applet, que contém os métodos essenciais para um applet java rodar, nesse caso, Variaveis é a super classe do projeto, e suas subclasses desde a classe nave obtém de forma indireta as propriedades da classe Applet, esse é o espírito da coisa.
Resumindo tudo, para fazer uma classe obter de forma direta acesso aos seus métodos e variaveis, usamos a palavra chave extends:
public class Classe1
{
int x = 200;
}
public class Classe2 extends Classe1
{
exiba (x);
}
Nesse caso, a Classe2 herda todos os métodos e variaveis da Classe1, podendo exibir a variavel x e recebendo o valor 200.
Caso na Classe2 existir também uma variavel x, por padrão ela será exibida, pois o java busca o x primeiro na classe atual, caso nao encontrar, irá checar as classes que ele herda os métodos, mas se caso isso acontecer, e você quer exibir o valor x da super classe Classe1, deverá usar a palavra chave super:
exiba (super.x);
ou para algum método é o mesmo caso, super.metodo1();
** A palavra chave implements…
A palavra chave implements serve para uma classe implementar uma interface, o que é uma interface? Uma interface é uma classe normal porém com seus métodos sem corpo, ela define um padrão de trabalho, para uma outra classe ver e implementar.
Por exemplo:
public interface Etapasweb
{
void criarSite();
void hospedarSite();
void divulgarSite();
}
[code]public class Webmaster implements Etapasweb
{
public void criarSite()
{
// corpo do metodo
}
[code]public void hospedarSite()
{
// corpo do metodo
}
public void divulgarSite()
{
// corpo do metodo
}
} // fim da classe[/code][/code]
Nesse caso temos uma classe Webmaster, que implementa a interface Etapasweb, uma interface como dito anteriormente é um conjunto de dados, assim como uma classe, porém essa define um padrão de comportamento a ser seguido rigidamente por uma outra classe. Se a classe Webmaster nao implementasse algum método da interface Etapasweb, geraria um erro na hora de compilar, isso se dá por causa da palavra chave implements.
Ao declarar implements Etapasweb voce disse que a classe Webmaster teria seus métodos implementados, então nesse caso a classe Etapasweb define como Webmaster tem que trabalhar, se voce é um webmaster e não hospeda o site por exemplo, nao estará seguindo o padrão de um webmaster, ou até se nao hospedar o site! :)rsrss
A interface Runnable por exemplo, se voce implementa ela, deve obrigatoriamente implementar o corpo do método run(), porém isso ja entra em outra história (Threads).
Então é isso pessoal, espero que todos tenham entendido a importância de usar multiplas classes, e interfaces em um sistema complexo (framework).
Abraços