Ajuda no uso de herança e classe abstrata

6 respostas
S

Oi companheiros sou novo aqui no fórum e estou iniciando em java.

Estou com duvida em um programa no que diz respeito a classes abstratas,La vai o caso:

Em um package chamado Principal ,criar uma classe chamada proprietário nela terá codigo:int ,nome:String e imovel: Imovel,e os métodos inscreverImovel (imovel:Imovel):void que deve identificar se o proprietário já possui um imóvel (imovel !=null) ele dispara uma mensagem de dizendo que proprietário já possui imóvel ,e o método listarImovel():void ,e o código devera ser um número seqüencial.
Em outro package chamado secundaria temos a classe abstrata Imovel com codLocalizacao:int,descricao:String ,valorUnidade:float e area:float, nela temos o método calcularImposto():float.Temos as subclasses Urbano com iptu:String e a classe Rural com itr:String e fatorRural:float cada uma tem o seu método calcularImpostos().

A classe Imovel,Rural e Urbano eu consegui fazer ok, mais minha duvida ficou no método inscreverImovel() do Proprietario ja que não tem como eu chamar um construtor de Imovel já que o mesmo e abstrato .Poderiam me dizer uma forma de fazer esse método;

6 Respostas

lelodois

Cara, confesso que não entendi sua dúvida…
Mas baixei seus fontes e vi os seguintes erros:

O método calcula impostos da classe abstrata deve ser abstrato e sobrescrito pelas classes filhas…

Veja os fontes em anexo.

Qq coisa explique sua dúvida novamente.
Abraços.

lelodois

Outra coisa que vi errado é a forma que vc tinha de instanciar seus objetos filhos…

Um construtor não deve ter retorno, o seu tinha.
Veja a diferença:

Isso é um método

public void Urbano(int codLocalizacao, String descricao, float valorUnidade, float area, String iptu) {

Construtor

public Urbano(int codLocalizacao, String descricao, float valorUnidade, float area, String iptu) {
		super(codLocalizacao, descricao, valorUnidade, area);
		this.iptu = iptu;
	}

Segue novamente os fontes em anexo
Abraços

S

Muito obrigado lelodois pelo esclarecimento…nunca tinha usado o Enum ,mais minha duvida seria em como criar o método inscreverImovel dentro da Classe Proprietario da seguinte maneira:

package principal;
import secundario.*;

public class Proprietario extends Imovel
{

private String nome;
private int codigo=0;
private Imovel imovel;//Não sei se está certo dessa maneira


public Proprietario()
{   
    codigo =codigo++; //para o cod ser gerado altomaticamente e seguencialmente
    imovel = new Imovel(); //Essa parte está errada pois classes abstratas não possuem construtor ou daria certo??
}
public Proprietario(String nome) //
{
    this();
    this.nome=nome;
}
public String setNome()
{
    return nome;
}
  public String getNome()
{
    return nome;
}
  public int getCodigo()
{   
    return codigo;
}
   public Imovel getImovel()
{   
    return imovel; //não sei se funciona dessa forma.
}

public void InscreverImovel()
{
    if(imovel!=null) //verifica se o  proprietario possui um imóvel
    {
       //aqui está a duvida de como inscrever um imóvel e de como dizer se é Urbano ou Rural
    }
    else
    {
     return System.out.printf("%s ,já possui o imovel %s",this.getNome(),imovel.getNome());//caso já possua um imóvel devolver a mensagem com o nome do proprietário e o nome do imóvel.
    }
}

}

lelodois

Olá velhinho…

Orientação a objetos deve ser estudada antes de implementada…
Olhe a apostila FJ11, é muito esclarecedora e possui um ótimo conteúdo sobre este assunto.

http://www.caelum.com.br/apostilas/

Abraços e bom estudos!

S

Valeu pela dica!!! :smiley:

S

Com a apostila que o amigo lelodois me passou o link consegui desenvolver as classes agora está dando um erro:
Exception in thread “main” java.lang.NullPointerException
at principal.Questao2.main(Questao2.java:30)

alguem poderia me dizer aonde está o erro ja pesquisei e revisei meu cod mais não identifiquei.

desde já agradeço a ajuda!!

Criado 21 de abril de 2011
Ultima resposta 25 de abr. de 2011
Respostas 6
Participantes 2