Olá! Estou iniciando em Java e agradeceria se me esclarecessem minha confusão. O código Java a seguir apresenta a sobrescrita de métodos em uma classe com herança, mas não consegui entender qual é o critério para o compilador escolher qual método vai utilizar. Ao rodar o código, é impresso na tela a string "lmnoplmnop"
1) No trecho de código "Va1 o=new Va2()" o que posso esperar de um objeto Va2 sendo criado, mas armazenado como objeto Va1?
2) Pelo que pude entender, o código lê o método getStr() de Va1, porém tal método esta sobrescrito em Va2. Por que, então, não é lido o método getStr() de Va1
3) Ao executar fin() e chamar ini(), dessa vez ele lê o ini() definido em Va2, sobrescrevendo o ini() de Va1, diferente de como fez com o getStr().
Ao ler esse código, não consegui compreender qual caminho eu devo esperar de um compilador do quesito sobrescrita de métodos. Aguardo ajuda dos colegas.
public class Va1 {
public static String getStr() {
return “abcdefghijklmnop“;
}
public String ini(String s, int cpr) {
return s.substring(0, cpr);
}
public String fin(String s, int cpr) {
return ini(s, cpr)+s.substring(s.length()-cpr, s.length());
}
}
public class Va2 extends Va1 {
public static String getStr() {
return “0123456789ABCDEF“;
}
public String ini(String s, int cpr) {
return s.substring(s.length()-cpr, s.length());
}
public static void main(String[] args) {
Va1 o=new Va2();
}
System.out.println(o.fin(o.getStr(), 5));
}