Herança

12 respostas
P

Pessoal,

Vejam o segunte código:

class Foo{
    int a = 10;
}

class Boo extends Foo{
     int b = a;

    public static void main(String[] args) 
         Boo b = new Boo();
         System.out.println(b.b);
}
Imprime 10, até aí tudo bem!!

Agora por que ñ posso fazer isso:

class Boo extends Foo{
     a = 20;
    // blá blá blá
}

Boo ñ herda Foo??
Entãp pq. ñ posso alterar o valor de a??

12 Respostas

I

tenta colocar

this.a = 20

P

Valew, porém ñ deu!!

Agora se eu coloco isso:

int b = a = 20;

Dá certo!!

Alguém sabe pq??

Marck

Olá…

pode mudar sim cara, desde que a variavel não seja final ou private.
Como vc sabe, se private acessaríamos com um metodo público.

não sei se responte tua pergunta, mas tenta dessa forma:

class Boo extends Foo{
      
        int mudaVar(){
     	a = 11;
     	return a;
     	
     }
 
     public static void main(String[] args) {
          
          Boo b = new Boo();
          System.out.println(b.mudaVar());
          
     }
 }
D

confere ai...aqui deu certo:

class Foo {
	static int a = 10;
}

class Boo extends Foo{
     
     int b = a;
 
     public static void main(String[] args) {
          a = 20;
          Boo ba = new Boo();
          System.out.println(ba.b);
 }
P
class Boo extends Foo{
       
         int mudaVar(){
      	a = 11;
      	return a;
      	
      }

Deu certo!!

Porém o q ñ entendo é pq. ñ estou conseguindo alterá-la diretamente na classe, ou seja, sem precisar de método??

P

Só lembrando que a ñ é final e nem private!!!

D

ow Pitágoras...pq não tenta o meu código...

Aqui funcionou certin...

class Foo {
 	static int a = 10;
 }
 
 class Boo extends Foo{
      
      int b = a;
  
      public static void main(String[] args) {
           a = 20;
           Boo ba = new Boo();
           System.out.println(ba.b);
  }
P

douglas_unemat,

entendi seu código, vc. colocou static em a e acessou-a do método main, porém, o q me é estranho é pq ñ consigo modificá-la fora do método main estando ela sem static!!

Rodrigo_Manhaes

Esse código que você postou

class Boo extends Foo{ a = 20; // blá blá blá }
não funciona simplesmente porque a sintaxe da linguagem Java não permite que você execute comandos diretamente no corpo da classe, sem estar dentro de um método. O erro não tem a ver com visibilidade de atributos.

P

Entendi, valew!!

neohacker

Variaveis não são sobrescritas na herança lembre-se

LPJava

entender isso é fundamental… o que pode ser subscrito sao metodos… apenas eles… as variaveis nao sao herdadas… mais pode ser acessada pela subclasse desde que o modificador de acesso permita isso.

class A{
int a=10;
}
class B extends A{
public static void main(String args[]){
int b=0;
A ob = A();
b=ob.a;
}
}

vc tb pode usar super.metodo, ou variavel para se referir a um membro da superclass.
flw :smiley:

Criado 5 de maio de 2007
Ultima resposta 7 de mai. de 2007
Respostas 12
Participantes 7