Jump to content

Dúvida sobre Classes


capzulu
 Share

Recommended Posts

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

Link to comment
Share on other sites

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? 🙂

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
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
 Share

×
×
  • Create New...

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.