Acesso aos membros da Classe Base com super?

Segundo o enunciado:

Nada impede que os membros da classe tenham o mesmo nome de membros da classe derivada.Suponha que [size=14]m[/size] seja nome de membro da classe base na classe derivada também tenha um membro com o mesmo nome.Suponha que num método da classe derivada apareça a expressão m então, este se refere ao membro da classe derivada por outro lado, se quiséssemos nos referir ao membro [size=14]m[/size] da classe base a expressão deveria ser[size=14] super.m.[/size]

[code]public class Base {int a=90;
int b=78;
int c=0;
}

class deri extends Base{int a=12;/*este membro tem o mesmo nome de um membro da classe
base */

int b=23; /*nome de membro aparece na classe base */

void le_atri()

    {System.out.println("Valor do membro a da classe Base:"+Base.a); //ERROR
     System.out.println("Valor do membro a da classe deri"+a);
     System.out.println("Valor do membro b da classe Base"+Base.b); //ERROR
     System.out.println("valor do membro a da classe deri:"+b);
     System.out.println("valor do membro c:"+c);}

}
class super1{
static public void main(String args[])
{
deri W=new deri();
W.le_atri();

}

}[/code]

Cara, estou em duvida, mais acho q vc tem q ter um construtor de classe em deri fazendo referencia aos objetos da classe Base. Pq na sua classe deri ela esta sem construtor, entao ele fica com o construtor default, ai nao consegui pegar os objetos da classe BAse

sabia q tinha alguma coisa de estranha no seu codigo, agora q me liguei,
vc nao pode declara BASE.a, pq a classe Base nao e estatica, testa assim

Classe Base

[code]public class Base {
int a=90;
int b=78;
int c=0;

public Base() {
}
}[/code]

Classse Deri

[code]public class Deri extends Base{
int a=12;/*este membro tem o mesmo nome de um membro da classe base */
int b=23; /*nome de membro aparece na classe base */
//Base ba= new Base();

public Deri() {
}

public void le_atri() {
System.out.println(“Valor do membro a da classe Base:”+super.a); //aqui q tava oERROR
System.out.println(“Valor do membro a da classe deri”+a);
System.out.println(“Valor do membro b da classe Base”+super.b);
System.out.println(“valor do membro a da classe deri:”+b);
System.out.println(“valor do membro c:”+c);}
}
[/code]
Super1

public class super1{ public static void main(String args[]) { Deri W = new Deri(); W.le_atri(); } }

BLz

Qual o resultado da compilação ? outra coisa, super se refere a membro de quem ?

Super refere-se a classe pai, q no seu caso e a classe Base

e o resultado da compilição e essa:

Valor do membro a da classe Base:90
Valor do membro a da classe deri12
Valor do membro b da classe Base78
valor do membro a da classe deri:23
valor do membro c:0

vc acessa qqr membro da classe BAse utilizando o super().

Blz

compila normal…

super se refere a atributos e métodos da classe a qual vc esta extendendo…

não é normal acessar atributos diretamente, o normal é encapsular os dados da classe, e acessalos e modificalos através de métodos, e assim manter a integridade da sua classe…

compilo de boa

usamos o super para acessar componentes da classe pai.

so não entendi isso

usando super, vc nao tira a integridades das classes

Organizando o codigo para esse sentido de implementação.

[code]abstract class Base {
int a=90;
int b=78;
int c=0;

Base(int x, int y, int z)
{a=x;
b=y;
c=z;
}
abstract void le();[/code]
Na forma na qual você exemplificou , super ela diz respeito a qual responsabilidade, para classe Base mas nao teria nada para classe Deri, ambos tem contrutores mas não se entende para qual argumentos estou me direcionando se para membros de um ou de outro.

[quote=Lavieri]compila normal…

super se refere a atributos e métodos da classe a qual vc esta extendendo…

não é normal acessar atributos diretamente, o normal é encapsular os dados da classe, e acessalos e modificalos através de métodos, e assim manter a integridade da sua classe…[/quote]

Usar o modificador private , usar métodos quando necessário , mas no que diz super seria a referencia da classe raiz…