Classe filha objeto de Classe Mãe?

12 respostas
J

bom, nao sabia como colocar um titulo esclarecedor, entao pus esse…

Ai pessoal uma questão interessante para responder

Digamos que eu tenho uma classe Carro, e uma outra classe Chevrolet extends Carro.

Carro c;
Chevrolet ch;


c=new Carro();
ch=new Carro(); //?????????????

E ae o que acham??? Se sim PQ? Se não PQ???

estou postando pq ontem fiquei em dúvida sobre isso, e depois sanei minha duvida, porem achei interessante.

cya!!

12 Respostas

C

Acho q não dá certo pois ch é uma referência para um chevrolet, e qdo a gente faz

ch = new Carro();

não está sendo passada uma referencia para chevrolet, e sim para carro (e carro não é um chevrolet). Já o contrário imagino q seria verdadeiro, pois chevrolet é um carro:

c = new Chevrolet();

E então, qual é a resposta?

J

jujo, aproveitando seu post, vou por mais lenha a fogueira… :smiley:

Carro c = new Chevrolet();
Chevrolet ch;

ch=c; //?????????????

O que acontecerá… pq? Tem solução (se tiver)? Qual seria a solução (se tiver)?

:wink:

C

JavaTeco,

Acho q dá pau, pois ch espera uma referência para um objeto Chevrolet, e vc tá passando uma referência para um objeto Carro… Agora se vc fizer o cast acho q funciona:

Então, quais são as respostas?

J

“carisio”:
JavaTeco,

Acho q dá pau, pois ch espera uma referência para um objeto Chevrolet, e vc tá passando uma referência para um objeto Carro… Agora se vc fizer o cast acho q funciona:

Então, quais são as respostas?

As suas duas respostas estão corretas… :joia:

J

AS Duas estão corretas sim, mas porque?!

Porque a classe Chevrolet extends Carro;
e isso pode, porém a o objeto cv apenas terá os métodos pertencentes a classe Carro, e os métodos da classe Chevrolet que estão implementados ela não terá acesso!

entao c e ch terão os memsmo métodos embora ch tenha sido declarado como um objeto de Chevrolet.

Até mais pessoal!

Se alguem mais tiver essas dúvidas e desafios interessantes por favor poste aqui, só iremos ganhar com isso!

=)

cya!

F

esse codigo funciona? se sim, o q acontece? se nao, pq?

public class Carro{
 protected int velocidade;
 public Carro(){
  System.out.println("Criando carro");
  velocidade = 0;
 }
 protected void acelera(int num){
  velocidade += num;
  System.out.println("Velocidade do carro: " + velocidade);
 }
}
public class Chevrolet extends Carro{
 public Chevrolet(){
  System.out.println("Criando Chevrolet");
 }
 public void acelera(){
  velocidade += 10;
  System.out.println("Velocidade do Chevrolet: " + velocidade);
 }
}
public class Fusca extends Carro{
 public Corsa(){
  System.out.println("Criando corsa");
 }
 public void acelera(int num){
  System.out.println("nao eh possivel acelerar o fusca em " + num);
 }
}
public class Executa{
 public static void main(String args[]){
  Carro c1, c2, c3;
  c1 = new Carro();
  c2 = new Chevrolet();
  c3 = new Fusca();
  c1.acelera(20);
  c2.acelera(30);
  c2.acelera();
  c3.acelera(20);
 }
}

amanha posto a resposta

J

em primeira instancia
achei dois erros, mas ja posto o resto.

public class Fusca extends Carro{
 public Corsa(){
  System.out.println("Criando corsa");
 }
 public void acelera(int num){
  System.out.println("nao eh possivel acelerar o fusca em " + num);
 }
}

faltou um retorno no método Corsa, o qual deveria ser Fusca e dai nao tem retorno mesmo =)

o resto vou analisar agora =) cya!

J

Bom, outro erro que eu achei foi na invocaçao do método c2.acelera(); o qual precisa um parametro int declarado na classe Carro, pois o objeto criado é da classe Carro e não da classe Chevrolet;

=)

acho que é isso, Felipe corrige ai!

=)

cya!

F

tipo, o erro do construtor da classe fusca foi erro de digitacao hauhauahuauahua e outra coisa q esqueci de avisar eh q eh pra considerar cada classe no seu respectivo arquivo…

qnto ao erro da invocacao do metodo acelera, vc acertou :smiley:

mas ainda tem mais coisa…

J

ahhhhh passei batido num ali, percebi agora…

a variável velocidade da classe Carro vai sendo incrementada, ou seja, se vc mandar imprimir mais uma vez, ex:
c1.acelera(10);

ele nao vai imprimir o 10 mas sim imprimirá o valor do atributo velocidade qeu agora vale 30, dará uma mensagem:

Velocidade do carro: 30

e assim para cada classe!

mmmm, mais alguma coisa?!

bah adoro esses testes kra… hahaha

ou felipe, se tiver mais ai poste =)

falou! =)

F

falto um errinho… a classe Fusca sobreescreve o metodo acelera(int num), mas o original da classe Carro era protected, e a classe Fusca ta sobreescrevendo como public, o q n eh permitido, qndo se sobreescreve um metodo deve se manter o mesmo acesso…

e vale lembrar q nao tem erro a classe Chevrolet sobreescrever o metodo acelera como public pois a versao dela eh sem parametros, dai n sobreescreve, sobrecarrega :wink:

J

eeeeeeeeeeeeeeee

=)

legal =) adquiri mais conhecimento hoje!!!

agora vou partir para o desafio que o jeve postou, eu ja tinha visto esse, mas não lembro bem ao certo.

cya!

Criado 5 de maio de 2004
Ultima resposta 5 de mai. de 2004
Respostas 12
Participantes 4