UpCasting

Galera… não estou entendendo pq este código abaixo não compila: :frowning:

[code]package relaciona;

public class Matriz {

public String diretorgeral = "Átila Palmeira";
public String tempo = "1o anos";

public Matriz() {

}

public void imprime() {
    System.out.println(tempo);
}

}[/code]

[code]package relaciona;

public class Filial extends Matriz {

public Filial() {

}

public void imprimetodos() {
    System.out.println("Tempo: " + tempo);
    System.out.println("Diretor geral: " + diretorgeral);

}

}[/code]

[code]package relaciona;

public class Main {

public static void main(String[] args) {

    Matriz filial = new Filial();
    filial.imprime();
    filial.imprimetodos();
}

}[/code]

Esta dando erro neste trecho:

 filial.imprimetodos();

Isso acontece pq o classe Matriz não tem o método imprimeTodos, vc declarou a variável com o nome filial, mas o tipo dela é matriz… sendo assim vc só pode acessar os método definidos pela Matriz e suas superclasses…

Se vc quiser utilizar o método imprimeTodos tem que declarar a variável com o tipo Filial, e não Matriz… Lembrando que os tipos são resolvidos estaticamente durante a compilação, logo não importa o tipo de objeto que está “contido” na variável, mas sim o tipo da variável.

[quote=Cosmo]Galera… não estou entendendo pq este código abaixo não compila: :frowning:

[code]package relaciona;

public class Matriz {

public String diretorgeral = "Átila Palmeira";
public String tempo = "1o anos";

public Matriz() {

}

public void imprime() {
    System.out.println(tempo);
}

}[/code]

[code]package relaciona;

public class Filial extends Matriz {

public Filial() {

}

public void imprimetodos() {
    System.out.println("Tempo: " + tempo);
    System.out.println("Diretor geral: " + diretorgeral);

}

}[/code]

[code]package relaciona;

public class Main {

public static void main(String[] args) {

    Matriz filial = new Filial();
    filial.imprime();
    filial.imprimetodos();
}

}[/code]

Esta dando erro neste trecho:

 filial.imprimetodos();

[/quote]

O objeto filial não possui o método imprimetodos()

Acho que você está tentando usar polimorfismo que significa que um objeto de um tipo se comporta de outra forma…

um jeito de você resolver isso seria transformando Matriz em uma interface assim:

package relaciona;

[code]public interface Matriz {

public String diretorgeral = "Átila Palmeira";
public String tempo = "1o anos";

public void imprime();
public void imprimeTodos();

}[/code]

[code]package relaciona;

public class Filial implements Matriz {

public Filial() {
	
}

public void imprimeTodos() {
	System.out.println("Tempo: "+tempo);
	System.out.println("Diretor Geral: "+diretorgeral);
}

public void imprime() {
	System.out.println(tempo);
	
}

}[/code]

package relaciona;

[code]public class Main {

public static void main(String[] args) {
	Matriz filial = new Filial();
	filial.imprime();
	filial.imprimeTodos();
}

}[/code]

Então como eu não estou chamando um método com a mesma assinatura que eu tenho em minha SuperClasse numca irá funcionar e isso tbm vale para atributos.

Blz se for isso eu entendi perfeitamente!