Superclasse e subclasses

10 respostas
F

Viva,

Eu estou com o seguinte problema: de uma forma genérica eu tenho uma superclasse Função e várias subclasses (Func1, Func2, Func3…), quando crio um objecto crio do tipo Função (Função f1) mas dependendo do que quero chamo o constructor da subclasse que pretendo (f1 = new Func1()).
Até aqui tudo bem, mas eu agora precisava de manipular o objecto dentro da minha superclasse. Como posso fazer para chamar o objecto dentro da superclasse e puder ter acesso aos métodos correspondentes da subclasse?

Desde já obrigado por toda a ajuda que me possam prestar…

10 Respostas

rodrigus

Deixa ver se entedi. Você quer manipular uma classe filha dentro de uma classe pai??

dgouvea

Olá fzenha, acho que para o que está querendo fazer é necessário que crie uma classe abstrata e métodos abstratos, somente assim a superclasse poderá acessar métodos das subclasses.

public abstract class Funcao {
    public abstract Object funcaoX();

    public void executar() {
        Object obj = funcaoX();
        if (obj instanceof ???) {
            ...
        }
    }
}
public class Funcao1 extends Funcao {
    public Object funcaoX() {
        return "teste funcao 1";
    }
}
public class Funcao2 extends Funcao {
    public Object funcaoX() {
        return "teste funcao 2";
    }
}

Caso não seja isso que você estava pensando me desculpe, talvez fosse legal postar o seu código para melhor entendermos sua dúvida.

Abraços,
David

F

Eu até postava o código só que não o tenho aqui comigo… :frowning:
Eu já tenho a superclasse definida como abstracta e vários métodos abstractos. Mas o que eu pretendia era dentro da superclasse puder manipular o objecto inicializado por uma outra subclasse. Ou seja, a subclasse pede ao utilizador os dados de entrada da função e inicializa o objecto com esses valores. Depois eu queria aceder a esse objecto dentro da superclasse para puder fazer uma série de calculos. Eu nem sei se isto será possivel… Eu aos métodos das subclasses consigo aceder porque estão definidos como abstractos na Superclasse, mas como faço para puder aceder ao objecto e manipulá-lo? Espero ter-me feito entender melhor agora…

LPJava

poe o codigo ai, para entender oq ta tentando fazer fica mais claro…

F

Aqui vai o código:

Main:

Funcao f;

System.out.println(Escolha a função pretendida:);

System.out.println(1 - ax);

System.out.println(2 - sen);

System.out.println(3 - ln);
op=in.nextInt();
    
    switch(op){
        case 1: 
                f = new Func1(0,0,0,0);
                break;
         case 2: 
                f = new Func2(0);
                break;
        default: 
                f = new Func3(0);
                break;                                     
    }
    f.ler();

Funcao(SUPERCLASSE):

public int MBS(double a, double b){

double erro=b-a;

double x;

do{

x=(a+b)/2;

if((calculo(a)<em>calculo(b))>0)

a=x;

else

b=x;

erro=b-a;

}while((abs(b-a))>(2</em>erro));
return x;
}

public abstract int getA();
public abstract int getB();
public abstract int getC();
public abstract int getD();
public abstract void ler();
public abstract double calculo();

Func1(Uma das subclasses):

public double calculo(int x){
double total;

total = (a*(x^3)+b*(x^2)+c*x+d);
    
    return total;

}

Acontece que é criado, por exemplo um objecto do tipo Funcao e que é inicializado por Func1. Depois será preciso efectuar uns calculos e da superclasse não consigo aceder ao objecto da subclasse…

neohacker

Só por curiosidade é um trabalho de cálculo :?:

F

Sim… É um trabalho de análise numérica. O que é suposto o programa fazer é: pedir ao utilizador que escolha uma ds funções tipo definidas pelo programa. Depois escolher um de três métodos que existem para calcular os zeros da função. No calculo do método será necessario aceder ao caculo da função. É neste passo que eu me estou a perder. Não consigo ir da superclasse para a subclasse e retornar um valor. Será preciso utilizar downcasting e upcasting?

fabim

é por ae…

se vc tem uma referencia ao objeto da superclasse, entao so os metodos da superclasse estarao disponivies nessa referencia… pe é o tipo da referencia declarada que determina quais serao os metodos ‘visiveis’…

Qdo vc xamar um metodo de superclasse e tiver sobrescrevido e instanciado um objeto de subclasse, o metodo chamado será o da subclasse instanciada.

agora, se vc tem certeza de que o objeto que esta ali é realmente um objeto de subclasse e precisa fazer algo especifico da subclasse, entao:

Pai obj = new Filho();

( (Filho) obj ).metodoEspecificoDeFilho() ;

neohacker

É eu tive que fazer um programa que tivesse que utilizar o método da Bissecção e da Secante…mó saco…é duro neh :slight_smile:

F

Põe dureza nisso!!! :roll:
Só o trabalho que tá a dar… Finalmente acho que consegui resolver o problema. Como o objecto tava a ser criado na classe Main, quando chamo o método para o cálculo que está na superclasse função, passo como parámetro o objecto e assim já consigo manipulá-lo centro da superclasse…

Criado 7 de maio de 2007
Ultima resposta 8 de mai. de 2007
Respostas 10
Participantes 6