Ajuda com Herança

8 respostas
I

Boa tarde pessoa,

estou com uma dúvida, eu tenho uma classe abstrata e terei diversas classes que herdam dela

mais ou menos assim,

public abstract Generica{}

public class Filha1 extends generica{}

public class Filha2 extends Generica{}

nessa classe generica eu criei um metodo do tipo fabrica para retornar os filhos dela de acordo com uma constante

mais ou menos assim

public static Generica criarFilha(parametro){

}

Eu estou tentando em uma outra classe fazer o seguinte

public class teste{

Generica generica = Generica.criarFilha(parametro)

}

8 Respostas

drsmachado

Primeiro. leia isto e você vai dar um grande passo http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor
Depois, formate corretamente teu post e ajude a si mesmo a ser ajudado

pedruhenrik

faltou aplicar isso: http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

e faltou mencionar a dúvida.

coisas simples mas que fazem uma diferença!

att,

decomaxkatsu

Cara eu não entendi a sua dúvida, afinal você não disse qual é... posta ai qual é a sua dúvida pra gente ver se consegue te ajudar...

Obs. coloca o código entre as tags [code], assim fica mais legivel...

Abraços!

deise.vicky

Meu amigo, dessa forma não dá certo.
Você deve fazer da seguinte forma:

public abstract class Generica{
    public abstract void criarFilha(parametro ...);

}

public class Filha extends Generica{
    public void criarFilha(parametro ...){
    
    }
}

Quando uma classe herda uma classe abstrata, ela deve implementar todos os métodos abstratos da super classe.
Pelo que sei não é possível instanciar uma classe abstrata.
Para entender melhor esse conceito dê uma olhada: http://www.tiexpert.net/programacao/java/classes-abstratas.php

Joao_Alonso

deise.vicky:
Meu amigo, dessa forma não dá certo.
Você deve fazer da seguinte forma:

public abstract class Generica{
    public abstract void criarFilha(parametro ...);

}

public class Filha extends Generica{
    public void criarFilha(parametro ...){
    
    }
}

Quando uma classe herda uma classe abstrata, ela deve implementar todos os métodos abstratos da super classe.
Pelo que sei não é possível instanciar uma classe abstrata.
Para entender melhor esse conceito dê uma olhada: http://www.tiexpert.net/programacao/java/classes-abstratas.php

Pelo que eu entendi ele declarou o método estatico, eñtão ele não precisa instaciar a classa para executar o método.
mas realmente sem o código não da para saber qual a dúvida.

Pelo o que eu entendi , você cria uma varíavel de referência de Generica e usa o método para atribuir um objeto Filha, seria isso ?

Kanin_Dragon

Jovem,

Também tive problemas com Herança, fazer inventario e complicado.

Abs,

deise.vicky

jalonso:
deise.vicky:
Meu amigo, dessa forma não dá certo.
Você deve fazer da seguinte forma:

public abstract class Generica{
    public abstract void criarFilha(parametro ...);

}

public class Filha extends Generica{
    public void criarFilha(parametro ...){
    
    }
}

Quando uma classe herda uma classe abstrata, ela deve implementar todos os métodos abstratos da super classe.
Pelo que sei não é possível instanciar uma classe abstrata.
Para entender melhor esse conceito dê uma olhada: http://www.tiexpert.net/programacao/java/classes-abstratas.php

Pelo que eu entendi ele declarou o método estatico, eñtão ele não precisa instaciar a classa para executar o método.
mas realmente sem o código não da para saber qual a dúvida.

Pelo o que eu entendi , você cria uma varíavel de referência de Generica e usa o método para atribuir um objeto Filha, seria isso ?

Sim, ele declarou o método estático, porém, pelo que sei, dessa forma só é possível chamar um método de outra classe que também seja estático.
Ficaria mais ou menos assim:

public class Generica{
    public static void criarFilha(parametro ...){

    }

}

public class Filha {
    public static void main(String[] args){
         Generica.criarFilha(parametro.);
    }
}

Se é isso que o cara quiz fazer não é legal utilizar classes abstratas…
Se ele está tentando usar o conceito de “herança” a forma como ele está fazendo está totalmente errado.

Joao_Alonso

Pelo que ele falou, ele ta utilizando o método criaFilha em uma tercerira classe, creio que nessa esteja o main também.

O que pode acontecer, mas não faz sentido. a varíavel de referência teria de saber do tipo Filha, porquê senão ele só tera acesso aos métodos da classe Generica, por mais que o objeto que ela guarde seja do "tipo" Filha.
tipo isso:

public abstract class Generica{   
    public static Filha criarFilha(){
    		Filha f = new Filha();
    		return f;
      }   
} 

public class Filha extends Generica {
}

public class Teste {
	public static void main(String args []){
		Filha f = Generica.criarFilha();
	}
}
perdão se estiver falando asneiras.
Criado 2 de junho de 2011
Ultima resposta 2 de jun. de 2011
Respostas 8
Participantes 7