Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

capzulu

Dúvida sobre Classes

Mensagens Recomendadas

capzulu

Boas, ando ás voltas a tentar encontrar uma resposta mas não consigo.

Tenho uma classe abstracta A, que tem como atributo um ArrayList de uma classe abstracta C.

A minha dúvida é como conseguir que uma função que exista na classe D (derivada da classe C) consiga aceder aos atributos da classe B (derivada da classe A).

Desculpem o abecedário mas se for preciso eu ponho código =)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Terás de colocar métodos de acesso para aceder aos atributos.

Se queres aceder a atributos que são exclusivos de B, então tens de criar métodos públicos em B e em D tens de ter uma instância para B. Se queres aceder a atributos de A, então tens de colocar os métodos públicos em A e em D teres uma instância de A ou de B.

Mais confuso? :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
capzulu

eu em A tenho um get da ArrayList, como funciona isso da instância?

Dissera-me que podia passar a classe como referência, mas também não sei como fazer isso

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Hum... o problema parece pior :) ... podes colocar um exemplo do código que tens, será mais fácil dar qualquer indicação se for algo que tenhas feito.

De qualquer modo, tens de explicar melhor a dúvida, se tens um get que devolve a lista, não sendo o método mais correcto, servirá. Ao ter ser devolvida a lista tens acesso ao atributo que pretendes.

Passar a classe classe como referência também não percebo bem, em Java, as classes são apenas o molde a partir do qual instancias objectos. Ao instanciares um objecto ganhas uma referência para esse objecto. Tirando os tipos primitivos, ex: int, float, etc, tudo em Java são referências portanto ao devolveres a lista, o que estás na verdade da devolver é uma referência para a lista. Não há nada de especial nisso, é assim que o Java funciona, é tudo referências e, salvo raras excepções, nem precisas pensar nisso.

Podes dar uma vista de olhos pela wiki do P@P, tens lá tutoriais de Java, especificamente http://wiki.portugal-a-programar.org/java:tutorial:00_home

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
capzulu

esta é a classe base, logo cada tipo de Ser vai ter um conjunto de regras que eu adiciono no construtor.

abstract public class Ser {

    private List<Regra> regras = new ArrayList<Regra>();
    private int inercia;

    public List<Regra> getRegras() {
        return regras;
    }

    public int getInercia() {
        return inercia;
    }

    public void setInercia(int inercia) {
        this.inercia = inercia;
    }
    }

abstract public class Regra {

    private int peso;

    public Regra(int peso) {
        this.peso = peso;
    }

    abstract public boolean condicao();

    abstract public void actuacao();
}

public class RegraAfunda extends Regra {

    public RegraAfunda() {
        super(10);
    }

    public boolean condicao() {
        return true;
    }

    public void actuacao() {
    }
}

na função actuacao por exemplo queria aumentar a inercia do Ser, como tenho acesso?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
capzulu

basta criar um atributo na classe RegraAfunda?

private Ser s;

Não tenho que fazer mais nada?  nem fazer uma atribuição qualquer? e o construtor não se altera?

desculpa lá tanta pergunta mas precisava mesmo disto para avançar o trabalho

Obrigado =)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Naturalmente precisas de preencher essa variável com o valor correcto, não é feito automaticamente, mas o local onde fazes a atribuição depende do que tens no código. Eventualmente o construtor da classe Regra poderá ser alterado para receber o objecto do tipo Ser, mas não tem de ser obrigatoriamente assim.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.