Problema construtor

11 respostas
G

Ae, tenho o seguinte código

package geometrico;

public abstract class ObjetoGeometrico {
    private double h,l;
    
    public ObjetoGeometrico(double l,double h){
        setAltura(h);
        setLado(l);
    }
    
    public double getAltura(){
        return h;
    }
    
    public double getLado(){
        return l;
    }
    
    public void setAltura(double h){
         this.h=h;
    }
    
    public void setLado(double l){
        this.l=l;
    }
    
    public abstract double Area();
    public abstract double Perimetro();
}
package geometrico;

public class Circulo extends ObjetoGeometrico{
private double h,l,r;
private double area,perimetro;

public Circulo(double h,double l,double r){
   super(h,l);
   this.r=r;
}
    @Override
    public double Area() {
        area =  (Math.PI*r*r);
        return area;
    }

    @Override
    public double Perimetro() {
        perimetro =(2*Math.PI*r);
        return perimetro;
    }
    
    
    
}

não tem como eu usar o l e o h nas operações da classe circulo? sem precisar usar o this.h=h;

11 Respostas

colored

Hum, se eu não me engano o this.seuAtributo é so pra fazer referencia ao atributo da classe, por que o parametro passado no seu metodo tem o mesmo nome do atributo;
Pelo menos assim você sabe que o atributo da classe recebe o parametro do metodo e nao o contrario.

G

quero dizer pra eu usar os valores que foram passados ao criar o objeto, não consigo usar eles

A

Para vc usar os seus parâmetros quando foi criado o objeto em outra class vc terá q chamar os seus métodos getAltura() e getLado() pois seus parâmetros foram criados como private.

F

Isso acontece pelo seguinte:

Na função, você recebeu um parâmetro “r”, então se você colocar r=r, você simplesmente estará referenciando ao parâmetro local que você recebeu, não o atributo da classe.

o “this” referencia o objeto corrente, ou seja, quando você coloca this.r, significa que estará acessando o atributo da classe, não o parâmetro que você recebeu.

Se você alterar o nome do parâmetro, poderá utilizar apenas como “r” normalmente.

F

Aliás, você pode utilizar normalmente os atributos da classe caso você não receba um parâmetro na função de mesmo nome…

Tava brisando aqui e pensei q vc tinha perguntado outra coisa.

por exemplo, olhe aqui:

area =  (Math.PI*r*r);

Você está usando o r sem o “this”.

G

aqui por exemplo

public ObjetoGeometrico(double l,double h){ setAltura(h); setLado(l); }

eu uso o set, que seria como usar o this

ai depois eu queria usar esse h e o l na classe que extend ela, aqui

@Override public double Area() { area = b*h; return area ; }

só que se eu não colocar o this.h no construtor dela, da 0 no resultado, pois não usa o valor utilizado na construção do objeto

F

Apenas um palpite… nao sei se está correto.

Troque

private double h,l,r;

por

private double r;

Na classe circulo

novato25

Bom, você pode acessar os atributos h e l nas classes que herdam de ObjetoGeometrico colocando estes atributos como protected.
Assim:

protected double h,l;

Obs.: não precisa criar esses atributos na classe filha.

ou, você pode acessar o valor desses atributos nas classes filhas através dos métodos getts: getAltura() e getLado();

G

só que no super(h,l) fica errado, se eu não declarar os dois na classe filho

novato25

De forma alguma. Em super(h,l), os parâmtros são os que estão declarados no construtor public Circulo(double h,double l,double r)

G

ae, finalmente entendi, agora deu certo

valeu

Criado 13 de abril de 2012
Ultima resposta 13 de abr. de 2012
Respostas 11
Participantes 5