Estou estudando Java, e com vergonha, venho pedir essa ajuda. estava tentando fz um programinha besta envolvendo carros. e n ta dando certo. vou colar os codigos.
classe carro.
public abstract class Carro {
String cor;
String marca;
String modelo;
public abstract void acelerar();
public void setCor(String cor) {
this.cor = cor;
}
public void setMarca(String marca) {
this.marca = marca;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String getCor() {
return cor;
}
public String getModelo() {
return modelo;
}
public String getMarca(){
return marca;
}
}
public class Nacional extends Carro{
public void acelerar() {
System.out.println("faz 100 km/h em 15 segundos");
}
public void setCor() {
super.setCor("preto");
}
public void setModelo() {
super.setModelo("gol");
}
public void setMarca(){
super.setMarca("Volksvagem");
}
public String getCor() {
return super.getCor();
}
public String getModelo() {
return super.getModelo();
}
public String getMarca(){
return super.getMarca();
}
}
public class Importado extends Carro {
public void acelerar() {
System.out.println("faz 100 km/h em 3 segundos");
}
public void setCor() {
super.setCor("azul");
}
public void setModelo() {
super.setModelo("civic");
}
public void setMarca(){
super.setMarca("Honda");
}
public String getCor() {
return super.getCor();
}
public String getModelo() {
return super.getModelo();
}
public String getMarca(){
return super.getMarca();
}
}
public class Loja {
public static void main(String args[]) {
System.out.println("Gostaria de ver nacional, ou internacional? ");
Nacional n1 = new Nacional();
System.out.println(" modelo = "+n1.getModelo());
System.out.println(" marca = "+n1.getMarca());
System.out.println(" cor = "+n1.getCor());
}
}
EDIT - por favor, ao usar o tag [ code ] , lembre-se de fechá-lo com [ /code ] . Obrigado pela atenção.
Cara na sua Classe carro você já coloco funcionalidade para o metodos get’s e set’s… e Como sua CLasse Nacional e Importado Herda de Carro eles já tem esses metodos (eles herdam da classe Carro) neste seu caso o único metodo que voce tem que implementar é o metodo abstract sempre que um classe herdar de classe.
Que erro que está dando? É erro de lógica? Digo isso pq quando rodei a aplicação gerou a seguinte mensagem:
Gostaria de ver nacional, ou internacional?
modelo = null
marca = null
cor = null
Se o seu problema for o fato de estar dando null , é pq vc nao pediu pra que essas variaveis fossem setadas.
Nas subclasses vc criou métodos:
public void setCor() {
super.setCor("preto");
}
public void setModelo() {
super.setModelo("gol");
}
public void setMarca(){
super.setMarca("Volksvagem");
}
mas nunca os chamou. Portanto é de se esperar que quando imprimisse, desse tudo null.
O que vc deve fazer é remover esses métodos “setters”, que não são setters de verdade, pois não tem parâmetros de entrada. Remova os getters também, pois os métodos da superclasse serão chamados automaticamente e coloque as seguintes linhas no construtor
Não está funcionando pq voce não está setando valores para os atributos, vc está apenas dando get sem antes dar nenhum set.
O que eu lhe aconselho seria criar um construtor em cada classe filha e nele voce dar um super.setXXX e aí passar os valores desejados. Aí quando vc der um get os valores irão existir. Seguindo o meu conceito, ficaria assim o recheio da classe Nacional:
public class Nacional extends Carro
{
Nacional()
{
super.setMarca(“GM”);
super.setModelo(“Astra”);
super.setCor(“Preto”);
}
@Override
public void acelerar()
{
// TODO Auto-generated method stub
}
}
Aí na sua Classe Loja na hora q voce cria o objeto Nacional ele seta os valores que estão no construtor e quando voce dá um get ele pega os métodos da classe pai Carro.
Um conselho que te dou é tomar mto cuidado ao usar Herança, pois as vezes usar demais acaba gerando mtos problemas pois qlq mudança na classe pai afetará todas as classes filhas.
[quote=EuclidesFilizola]que eu saiba, sobrescreve apenas os metodos abstratos né não? os demais, eu apenas digito super.metodo();
[/quote]
Não, o pepino é mais grosso.
Quando vc faz uma subclasse concreta, ou seja, sem o abstract, os métodos abstratos da superclasse devem ser obrigatoriamente implementados, os demais apenas se você quiser redefeni-los. No caso de o método ter a implementação igual ao da superclasse, vc simplesmente não faz NADA. Java e qualquer linguagem orientada a objetos realiza a busca de métodos em toda a hierarquia.
Quando vc faz uma subclasse abstrata, os métodos abstract podem ou não ser implementados, se não quiser implementar, significa que vc está deixando a responsabilidade para as suas futuras subclasses.
Valeu moçada… =D … agradeço ae a todos. desculpa o incomodo … ;D … perguntas idiotas … acontecem… eu sou ini total… to começando. agradeço a todos … tenham um bom dia… obrigado mais uma vez …
eclides seja bem vindo ao guj… mais assim qual foi sua duvida mesmo?
Uma dica como vc está apredendo é interessante vc começar a fazer programas pequenos… porem funcional… que vc entenda com mais facilidade… as vezes os programas muito grande como esse para quem está apredendo pode dificultar… e acabar desviando o foco do que é apresentado por exemplo… um programa desse vc tem que ter muita atenção em q cada classe está fazendo… e cada class na minha opniao tem linha demais… se a ideia… é aprender heraça pode fazer em um programa menor, porem funcional e q entenda com mais facilidade… quando se sentir mais seguro ai vc começa a desenvolver programas mais complexos usando o recurso de herança…
class Veiculo{
void setCor(){
System.out.println("Preto");
}
class Golf extends Veiculo{
void setPlaca(){
System.out.println("14524");
}
}
observe que usei a herança… minha class filha herdou o metodo da class pai, porem nao subscrevir o metodo… apenas definir um novo metodo somente para classe filha…
espero ter ajudado é so uma dica. vc faz tb como achar que fica mais facil para vc :D. flw!!