Outra dúvida sobre referência

3 respostas
marciojesus
class Super {
    public  void go() {
	System.out.println("super - Go");
    }

    public void goBack() {
	System.out.println("super - Goback");
    }
}

class Child extends Super{
    public void go() {
	System.out.println("Child- Go");
    }

    public void goBack() {
	System.out.println("Child- GoBack");

    }
}

public class TestSuper {
    public static void main(String[] args) {
	Super s = new Super();
	s.go();
	
	Child c = new Child();
	c.go();
	
	Super su = new Child();
	su.goBack();
    }
}
nao entendi o porque disto, Super su = new Child(), se invoco o mesmo metodo da minha classe, nao seria igual isso Child su = new Child()?Sei que su uma referencia da classe super,mas nao entendi a logica disto.. Se alguem poder me dar uma ajuda eu agradeço..

3 Respostas

nel

Antes de mais nada, coloque edentado seu código, mal consigo ler ele. Use as tags code para isso, veja a diferença.

class Super { 
public void go() { 
System.out.println("super - Go"); 
} 

public void goBack() { 
System.out.println("super - Goback"); 
} 
} 

class Child extends Super{ 
public void go() { 
System.out.println("Child- Go"); 
} 

public void goBack() { 
System.out.println("Child- GoBack"); 

} 
} 

public class TestSuper { 
   public static void main(String[] args) { 
     Super s = new Super(); 
     s.go(); 

    Child c = new Child(); 
    c.go(); 

    Super su = new Child(); 
    su.goBack();
  }
}

Só para esclarecer algo, a diferença é básica.
Se fizer:

Super s = new Child();

Você terá acesso a todos os métodos públicos contido em S, porém, se fizer :

Child c = new Child();

Você tem tudo o que consta em Child e seja público (a nível de instância), incluindo o que consta em Super e no próprio Child.

ViniGodoy

Da forma que está realmente não tem muita utilidade. Isso passa a ter utilidade a partir do momento que você entende que você pode ter um método que lida com qualquer Super:

public void goBack(Super super) {
   super.goBack();
}

goBack(new Child());
goBack(new Child2());
Ou então, que você pode ter uma lista de um Super ou qualquer filho de Super:
List<Super> supers = new ArrayList<Super>();
NewScript

Para entender o que esta acontecendo aconselho a ler a apostila Fj-11 Java e orientação a objetos da Caelum, totalmente gratuíta.

Criado 24 de abril de 2013
Ultima resposta 24 de abr. de 2013
Respostas 3
Participantes 4