Galera, não consegui compreender aqui que métodos static não são polimorfismo, alguém pode me simplificar???
o texto que fala isso:
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/oo/o_que_e_polimorfismo.htm
Obrigado pela atenção!!!
Galera, não consegui compreender aqui que métodos static não são polimorfismo, alguém pode me simplificar???
o texto que fala isso:
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/oo/o_que_e_polimorfismo.htm
Obrigado pela atenção!!!
Olá, alexandref93!
Muitas vezes métodos estáticos são necessários, mesmo sabendo que eles são chamados através da classe, e não de um objeto. E fazer isto realmente é uma “atitude” procedural. Quanto ao polimorfismo, podemos definir como a capacidade de um objeto poder ser referenciado de várias formas.
Resumindo, métodos estáticos não pertecem ao objeto, por isto, não desfrutam de uma das coisas mais belas da POO: polimorfismo.
Abraços!
Obs.: sou novo no mundo da programação, por isto, não me humilhem em público! hahaha
Bom dia!!
Métodos estaticos não são polimorfismo, pois pertencem a classe e não ao objeto, ex.:
Uma superclasse
[code]package polimorfismo;
public class Mamiferos {
// Método estatico da classe Mamiferos
public static void comer() {
System.out.println("Mamiferos comendo");
// TODO Auto-generated method stub
}
public void andar() {
System.out.println("Mamiferos andando");
// TODO Auto-generated method stub
}
}
[/code]
E uma subclasse:
[code]package polimorfismo;
public class Cachorro extends Mamiferos {
//tentando fazer override do método estatico da classe mamiferos
public static void comer() {
System.out.println("Cachorros comendo");
}
//Este metodo é sobrescrito, pois não é nem static nem final
public void andar() {
System.out.println("Cachorros comendo");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Mamiferos b = new Cachorro(); // Criando uma variavel de referencia mamiferos que aponta para um objeto Cachorro
// Estamos tentando chamar o metodo comer() da classe cachorro que aparentemente esta sobreescrevendo o da classe Mamiferos
b.comer();
b.andar(); //Chamando um método sobrescrito.
}
}
[/code]
A saida deste programa é a seguinte:
Mamiferos comendo
Cachorros comendo
Ou seja podemos deduzir que métodos estaticos não podem sofrer override pois eles pertencem a classe pai (a classe cachorro até herda ele). Quando o compilador vai chamar um método estatico ele olha apenas o tipo de referrencia e não o objeto passado, pois os membros estaticos não precisam de um objeto para serem chamados eles podem e “devem” ser chamados a partir da classe, o exemplo anterior ficaria mais claro assim:
[code]package polimorfismo;
public class Cachorro extends Mamiferos {
//tentando fazer override do método estatico da classe mamiferos
public static void comer() {
System.out.println("Cachorros comendo");
}
//Este metodo é sobrescrito, pois não é nem static nem final
public void andar() {
System.out.println("Cachorros comendo");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Mamiferos b = new Cachorro(); // Criando uma variavel de referencia mamiferos que aponta para um objeto Cachorro
// Estamos chamando o metodo comer a partir da classe, ou seja não precisamos instanciar um objeto para chamar um metodo estatico, por isto não temos como sobreescrever este metodo, o que na a classe cachorro esta fazendo e redefinindo o método estatico comer().
Mamiferos.comer();
b.andar(); //Chamando um método sobrescrito.
}
}
[/code]
Pessoal tb estou estudando para certificação, então se tiver alguém erro ou faltando algo por favor me corrijam, acabei de passar por este topico nos meus estudos,uhauhuah.
Espero ter ajudado.
vlw, agora entendi!!
Obrigado pela atenção!!!