Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
capzulu

Dúvida sobre Classes

Recommended Posts

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 =)

Share this post


Link to post
Share on other 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? :)

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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 =)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.