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]
publicclassBase{inta=90;intb=78;intc=0;}classderiextendsBase{inta=12;/*este membro tem o mesmo nome de um membro da classebase */intb=23;/*nome de membro aparece na classe base */voidle_atri(){System.out.println("Valor do membro a da classe Base:"+Base.a);//ERRORSystem.out.println("Valor do membro a da classe deri"+a);System.out.println("Valor do membro b da classe Base"+Base.b);//ERRORSystem.out.println("valor do membro a da classe deri:"+b);System.out.println("valor do membro c:"+c);}}classsuper1{staticpublicvoidmain(Stringargs[]){deriW=newderi();W.le_atri();}}
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
marcelopacheco85
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
public class Base {
int a=90;
int b=78;
int c=0;
public Base() {
}
}
Classse Deri
publicclassDeriextendsBase{inta=12;/*este membro tem o mesmo nome de um membro da classe base */intb=23;/*nome de membro aparece na classe base *///Base ba= new Base();publicDeri(){}publicvoidle_atri(){System.out.println("Valor do membro a da classe Base:"+super.a);//aqui q tava oERRORSystem.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);}}
Qual o resultado da compilação ? outra coisa, super se refere a membro de quem ?
marcelopacheco85
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
marcelopacheco85
vc acessa qqr membro da classe BAse utilizando o super().
Blz
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…
marcelopacheco85
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
Marcio_Duran
marcelopacheco85:
Super refere-se a classe pai, q no seu caso e a classe Base
Organizando o codigo para esse sentido de implementação.
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();
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.
Marcio_Duran
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…
Usar o modificador private , usar métodos quando necessário , mas no que diz super seria a referencia da classe raiz…