Herança

Pessoal como eu uso um atributo por herança na 3º Classe?

Por exemplo Classe B para usar um atributo de Classe A usa:

 super(atributo1, atributo2);

mas se eu estou na Classe C e quero usar um atributo da Classe A?

So usando super da erro pois ele busca na Classe B :shock:

Como devo escrever o código?

Bom, desculpe se eu estou falando abobrinha mais eu penso que você pode fazer 2 coisas…

Ou você faz essa classe extensao da classe A.

Ou você deixa a classe A como publica e instancia objetos.

Se ajudei vlw… se não … sorry … sou novo hehe ^^ :smiley:

[quote]Ou você faz essa classe extensao da classe A.

Ou você deixa a classe A como publica e instancia objetos.[/quote]

Como assim faz extensão?

E não posso colocar a classe como public, tem que ser private

:wink: Valeu!

[code]private class C extends A{

}[/code]
desculpa se estiver errado mas acho que seria isso…

Ué…

Você está fazendo mais ou menos isso não é

Class ClasseB extends ClasseA { .....

E depois

Class ClasseC extends ClasseB { ....

Pensando analogicamente, a classe A é o pai … a B é o filho e a C é o neto porém … A pode ser pai de B e de C então você faz

Class ClasseC extends ClasseA { ...

Se ClasseC e ClasseB não necessitarem de conversar entre si tanto faz se forem publicas ou não … mais se precisarem elas tem de ser publicas … ai vocês faz elas publicas e seus atributos privados ué…

Novamente… desculpa se eu estou falando merda… eu só to tentando ajudar ;D

[quote=eos]Pessoal como eu uso um atributo por herança na 3º Classe?

Por exemplo Classe B para usar um atributo de Classe A usa:

 super(atributo1, atributo2);

[/quote]

Não, isso é para chamar o construtor da classe base.
Para usar um atributo da classe base, você o utiliza como se fosse um atributo normal, na classe filha. Desde que ele seja visível: public, protected ou default.

Você só consegue usar um construtor da classe pai. Não tem como pular construtores.

Para o caso dos atributos, simplesmente use-os, como se fossem declarados na classe C.

[quote=jayrmotta]Bom, desculpe se eu estou falando abobrinha mais eu penso que você pode fazer 2 coisas…

Ou você faz essa classe extensao da classe A.

Ou você deixa a classe A como publica e instancia objetos.

Se ajudei vlw… se não … sorry … sou novo hehe ^^ :D[/quote]

É abrobrinha e gambi.
extends A porque pode não ser viável.
Deixar como public é uma má prática de programação (não só a OO).

[quote=dedejava][quote=jayrmotta]Bom, desculpe se eu estou falando abobrinha mais eu penso que você pode fazer 2 coisas…

Ou você faz essa classe extensao da classe A.

Ou você deixa a classe A como publica e instancia objetos.

Se ajudei vlw… se não … sorry … sou novo hehe ^^ :D[/quote]

É abrobrinha e gambi.
extends A porque pode não ser viável.
Deixar como public é uma má prática de programação (não só a OO).[/quote]

Pode até ser “abrobrinha” e “gambi” porém eu tentei ajudar o cara e não ocupei o tópico criticando, tu quer comprar briga ou sei la o que baixa um joguinho de net compra uma espada e sai batendo… aqui é pra quem quer aprender mais… se você sabe mais bom pra você … isso nunca indicou direito de ofender ninguem. Se eu nao tenho “boas práticas” como você, me dei mal mais ainda assim tentei ajudar e se ele conseguiu provavelmente ficou muito mais satisfeito com meu comentario infame do que com sua critica construtiva.

Estou com uma dúvida na cabeça agora…

nós podemos utilizar um método de uma classe pai que foi sobrescrito na classe filha através do super, não podemos?

Exemplo

class Pai {
    public void escrever() {
        System.out.println("Método da classe pai");
    }
}

class Filha extends Pai {
    public void escrever() {
        super.escrever();
        System.out.println("Método da classe filha");
    }
}

public class TestePaiFilha {
    public static void main(String[] args) {
        Filha objFilha = new Filha();
        objFilha.escrever();
    }
}

Nesse caso, teremos como saída:
“Método da classe pai”
“Método da classe filha”

[quote=GustavoLaguna]Estou com uma dúvida na cabeça agora…

nós podemos utilizar um método de uma classe pai que foi sobrescrito na classe filha através do super, não podemos?

Exemplo

class Pai {
    public void escrever() {
        System.out.println("Método da classe pai");
    }
}

class Filha extends Pai {
    public void escrever() {
        super.escrever();
        System.out.println("Método da classe filha");
    }
}

public class TestePaiFilha {
    public static void main(String[] args) {
        Filha objFilha = new Filha();
        objFilha.escrever();
    }
}

Nesse caso, teremos como saída:
“Método da classe pai”
“Método da classe filha”[/quote]

Exatamente, belo ponto de vista. O que eu quis dizer la em cima é que se como você exemplificou as Class defaults ele poderia tanto Extender a classe C da A quanto instanciar objetos para chamalas.

Ex:

____________ClasseA
______ClasseB______ClasseC

Só que ai a relação de herança de B para C some… ai só instanciando mesmo! Estou errado?