Olá, pessoal! Estou começando a estudar Java agora e estou com dificuldade para entender alguns conceitos básicos. Gostaria apenas que me ajudassem na definição de dois assuntos (por enquanto) que sei que são importantíssimos: Polimorfismo e Encapsulamento. Não precisa falar mto não. Só mesmo um conceito sucinto será suficiente.
Pra provar que não precisa falar mto, vou dá um exemplo. Perguntei pra um amigo o conceito de Sobrecarga de Métodos (method overload) e ele disse: “É quando vc usa a mesma assinatura de um método, mas modifica o tipo do parâmetro que este irá receber.”
Polimorfismo tem a ver com herança, por exemplo. Você sabe que todas as classes em java extendem Object, certo? Se caso você criar um método com essa aparência.
você pode passar qualquer objeto criado em java, porque ele concerteza vai ter o método hashCode, podendo ter sido sobreposto ou não.
Encapisulamento é proteger a informação da sua classe, Ter variáveis privadas e o acesso a elas é feito através de métodos publicos. Funciona para você controlar o que você passa para sua variável! o exemplo básico da idade que eu adoro:
sem encapsulamento
class Test {
int idade;
public static void main( String[] args ) {
Test test = new Test();
test.idade = -10; //temos uma idade negativa
}
}
con encapsulamento
class Test {
private int idade;
public void setIdade( int idade ) {
if( idade < 0 )
this.idade = 0;
else
this.idade = idade;
}
public static void main( String[] args ) {
Test test = new Test();
test.setIdade( -10 ); //temos idade = 0
}
}
O polimorfismo permite que você use um tipo generico para representar um objeto de uma subclasse… ex.:
[code]public class Pessoa{
}
public class Funcionario extends Pessoa{
}
public class Cliente extends Pessoa{
}
Pessoa p = new Funcionario();
Pessoa p2 = new Cliente();[/code]
Veja que o tipo da variavel é Pessoa, mas o objeto colocado nela é de uma subclasse, assim as variaveis p e p2 darão acesso aos membros que são definidos na classe Pessoa, mas não darão acesso aos membros definidos somente nas subclasses…
Já o Encapsulamento consiste em esconder dentro do objeto “coisas” que não dizem respeito a quem o usa, que são importantes apenas para o objeto, é como você usar um carro, você não precisa saber como o motor funciona, só precisa saber que tem que apertar o acelerador, o freio, etc…
veja:
[code]public class Pessoa{
private String nome;
private int idade;
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return nome;
}
//get e set idade
}[/code]
Ninguem precisa saber que existe uma variavel nome e uma idade na classe pessoa, só precisa saber que existem os metodos set e get pra cada um, o que esses metodos fazem pra guardar e recuperar o nome e a idade não interessa…
Pessoa p = new Pessoa();
p.setNome("jair");
String n = p.getNome();
Assim o ideal é manter publico só o que o usuario da classe precisa para usa-la, o que é mecanismo interno não precisa, e não deve, ser exposto…
Vou dar uma outra visão dos dois casos.
Polimorfismo: Um exemplo é o botão ON/OFF. No seu controle remoto, o mesmo botão serve para ligar/desligar a TV ou o DVD ou o Video, depende em qual aparelho ele está conectado (pode chamar isso de “assinatura”)
Encapsulamento: Quando vc entra no seu carro e aperta o acelerador, um monte de ações mecânicas e eletrônicas são disparadas, mas não sabemos exatamente quais foram e em qual seqüência, isso tudo foi “embalado” para apenas acelerar.
aproveitando o tópico poliformismo não seria você usar um método para obter resultados diferentes ?
do tipo
public class poligono{
void desenha();
}
public class circulo extends poligono{
desenha();
}
public class quadrado extends poligono{
desenha();
}
bem o que estou tentado disser é o seguinte temos a classe pai que é poligono nela tem o metodo desenha e temos as classes circulo e quadrado que são filhas da classe poligno ambas herdaram o método desenha(); mas cada classe ira exibir um tipo diferente de poligono. Este tipo de coisa também é um poliformismo ???