Olá galera
Gostaria que alguém esclarece uma dúvida minha. Pois bem vamos lá. Criei um pacote e dentro duas classes. Uma com o modificador não-referente abstract e outra concreta. Sei que uma classe abstract não pode ser instanciada jamais em uma classe concreta. Eis a minha experiência.
Minha classe abstract
package java_6_Cap1;
public abstract class CarroAbstrato {
abstract void calcularConsumo();
abstract void calcularVelocidade();
void imprimirMensagem() {
System.out.println("Estamos na classe Carro");
}
}
Vou estendê-la a partir de outra classe em outro pacote
import java_6_Cap1.CarroAbstrato;
public class TesteCarroAbstrato extends CarroAbstrato {
void calcularVelocidade(){}
void calcularConsumo(){}
}
class Teste {
public static void main(String...args) {
TesteCarroAbstrato tc = new TesteCarroAbstrato();
System.out.println(tc.imprimirMensagem());
}
}
O que acontece pessoal é que o compilador reclama que a classe TesteCarroAbstrato não é uma classe abstract e não pode sobrescrever o método calcularVelocidade(). Se coloco as duas em um mesmo pacote roda direitinho. Posso concluir então que somente é possivel rodar um programa que tenha uma classe concreta estendendo uma classe abstrata desde que as duas estejam no mesmo pacote? Ou se estiver errado, alguém poderia apontar onde está o errro e onde posso corrigir.
Estou aguardando um feedback. Obrigado por enquanto
eu acho q o problema esta na visibilidade das funções, coloque-as seus arquivos em um mesmo pacote ou declare as funções abstratas como publicas
Olá quikko
Não tem problema de visibilidade não e vc está certo dentro do mesmo pacote o programa roda direitinho. O problema é quando vc importa uma classe abstract e estende ela a partir de uma classe concreta. Ai gera a exception que eu te falei. Mas valeu cara pela ajuda. Deus te abençõe
Coloque o modificador protected nos métodos para que classes fora desse pacote que herdam essa classe também herdem os métodos
É só declarar como público os métodos da classe CarroAbstrato.
Fica assim:
[code]
public abstract class CarroAbstrato {
public abstract void calcularConsumo();
public abstract void calcularVelocidade();
public void imprimirMensagem() {
System.out.println("Estamos na classe Carro");
}
}
public class TestaCarroAbstrato extends CarroAbstrato {
@Override
public void calcularConsumo() {
// TODO Auto-generated method stub
}
@Override
public void calcularVelocidade() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
TestaCarroAbstrato tca = new TestaCarroAbstrato();
tca.imprimirMensagem();
[/code]
Abraço;
Perfeito ederson, havia esquecido desse pequeno detalhe. Os métodos que eu havia declarado na classe abstract CarroAbstrato estavam com nível de acesso default, por mais que a classe estivesse com acesso public, meu métodos jamais seriam sobreescritos devido a visibilidade em outra classe de outro pacote. São esses pequenos detalhes que podem nos levar a loucura na hora da prova.
Obriagdo amigo e que Deus te abençoe na hora que tu fores fazer a prova
Problema resolvido galera, vejam o recado que mandei para ederson no último post dess tópico