Problema com Herança

5 respostas
A

Ola pessoal, bom dia, andei dando uma pesquisada e não obtive susseso...

Tenho essas 3 classes(BEAN)
package exemplo.bean;

public class veiculo
{
    private String marca;
    private int ano;

    public String getMarca()
    {
        return marca;
    }

    public void setMarca(String marca)
    {
        this.marca = marca;
    }

    public int getAno()
    {
        return ano;
    }

    public void setAno(int ano)
    {
        this.ano = ano;
    }
}
package exemplo.bean;

public class barco extends veiculo
{
    private double comprimento;
    private double potenciaMotor;


    public double getComprimento()
    {
        return comprimento;
    }

    public void setComprimento(double comprimento)
    {
        this.comprimento = comprimento;
    }

    public double getPotenciaMotor()
    {
        return potenciaMotor;
    }

    public void setPotenciaMotor(double potenciaMotor)
    {
        this.potenciaMotor = potenciaMotor;
    }
    
}
package exemplo.bean;

public class automovel extends veiculo
{
    private String cor;

    public String getCor()
    {
        return cor;
    }

    public void setCor(String cor)
    {
        this.cor = cor;
    }
}

e a seguinte pagina:

<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage=""%>

<%@ page language="java" import="exemplo.bean.veiculo"%>
<%@ page language="java" import="exemplo.bean.barco"%>
<%@ page language="java" import="exemplo.bean.automovel"%>

<%
veiculo[] est = new veiculo[6];
est[0] = new barco();
est[1] = new automovel();

est[0].setComprimento(1.8);
est[1].setCor("azul");

...

e o seguinte erro:

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 13 in the jsp file: /paginas/trab/01.jsp
Generated servlet error:
The method setComprimento(double) is undefined for the type veiculo

An error occurred at line: 13 in the jsp file: /paginas/trab/01.jsp
Generated servlet error:
The method setCor(String) is undefined for the type veiculo

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

O que eu estou precisando é o seguinte criar um array de veiculos e especificar depois quais os tipos de veiculos estarão nas posições do array de veiculo.... tipo na posição 0 do array vai ser um barco que herda o veiculo... e na posição 1 do array vai ser um automovel que herda o veiculo...

Obs. precisa ser em um array e terão mais tipos de veiculos... o problema eh que não estou conseguindo acessar os medodos das classes que herdao o veiculo... se eu tentar acessar um metodo da classe veiculo ele funciona normal !!!

Estou usando o tomcat 5.5.20 e jsdk 1.5.0_04

Desde ja grato !!

5 Respostas

U

desta forma que você quer fazer vc teria então que fazer um cast no objeto veiculo, algo ± assim

if (veiculo[0] instanceof barco) {
   barco barco = (barco) veiculo[0];
}

entendeu ?

Rafael_Nunes

Se vai trabalhar de forma polimórfica com os objetos, não seria melhor então definir os métodos na classe veículo?

Você não está conseguindo acessar porque sua referência é do tipo veículo e sua instância de outro tipo, mas veículo não possui os métodos que você está tentando acessar.

A

ualex:
desta forma que você quer fazer vc teria então que fazer um cast no objeto veiculo, algo ± assim

if (veiculo[0] instanceof barco) {
   barco barco = (barco) veiculo[0];
}

entendeu ?

esse foi o erro que aconteceu…
[b]
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 13 in the jsp file: /paginas/trab/01.jsp
Generated servlet error:
veiculo cannot be resolved
[/b]

ai eu tentei colocar assim:

if (veiculo[0] instanceof barco) {
   barco barco = (barco) est[0];
}

e mesmo assim não consigo referenciar os metodos do barco nem na variavel barco e nem na est[0]…

Mais alguma idea…

A

Rafael Nunes:
Se vai trabalhar de forma polimórfica com os objetos, não seria melhor então definir os métodos na classe veículo?

Você não está conseguindo acessar porque sua referência é do tipo veículo e sua instância de outro tipo, mas veículo não possui os métodos que você está tentando acessar.

Mais ai eu vou perder a ideia de orientação a objeto… pois no meu automovel existem metodos que no meu barco não existem…

Mais alguma ideia ??

Rafael_Nunes

Que idéia de orientação a objeto você vai perder?
Se você quer utilizar polimorfismo, então a referência deve conter os comportamentos que você vai utilizar da instância.

Se você não pode definir o método na classe veículo, então a referência não tem por que ser de veículo.

Criado 19 de novembro de 2007
Ultima resposta 19 de nov. de 2007
Respostas 5
Participantes 3