Heranças e Interfaces

4 respostas
rafaelgloria

Estou com uma dúvida no código abaixo, está dando erro no seguinte:

Crio um array de objetos do tipo Shape[] e depois preencho ele com objetos de outros tipos, um array de shapes com figuras como retangulo, circulo etc, ateh aih funcionava, mas agora coloquei uma interface CenteredShape e outra classe CenteredRectangle e não esta funcionando:

public abstract class Shape
{
	public abstract double area();
	public abstract double total();
}

public class Rectangle extends Shape
{
	protected double w,h;
	
	public Rectangle (double w, double h) // construtor
	{
		this.w=w; this.h=h;
	}
	public double getWidth() // acessador
	{
		return w;
	}
	public double getHeigth() // acessador
	{
		return h;
	}
	public double area () // implementa o abstrato
	{
		return (w*h);
	}
	public double total() // perimetro
	{
		return (2*(w+h));
	}
}

public interface CenteredShape
{
	public void setCenter (double x, double y);
	public double getCenterX ();
	public double getCenterY ();
}

public class CenteredRectangle extends Rectangle
implements CenteredShape
{
	// atributos
	private double cx, cy;
	
	// metodos
	// construtor
	public CenteredRectangle (double cx, double cy, double w, double h)
	{
		super(w,h);
		this.cx = cx; this.cy = cy;
	}
	// modificador
	public void setCenter (double x, double y)
	{
		cx = x; cy = y;
	}
	// acessadores
	public double getCenterX ()
	{
		return cx;
	}
	public double getCenterY ()
	{
		return cy;
	}
}

public class PrincipalCentered
{
	public static void main(String[] args)
	{
		Shape[] figura = new Shape[1]; // cria array
		figura[0] = new CenteredRectangle(0.5, 1.5, 1.0, 3.0);
		
		// Saida
		System.out.println
			("Centro Rectangle: "+figura[0].getCenterX()+
			 " e "+figura[0].getCenterY()); // erro aqui ! ! !
	}
}

Valeu.  :D 
Rafael.

4 Respostas

J

Vc esta fazendo um array de Shape e tentando acessar métodos de retorno, no caso os getCenterX e getCenterY da classe CenteredRectangle.

Na superclasse, no caso Shape, os métodos que vc tenta acessar tem que estar nela tb.
Tente colocar em Shape os métodos:

public abstract double getCenterY();
public abstract double getCenterX();

Vai funcionar.

Rafael_Steil

Nao vai funcionar pq o teu array eh do tipo Shape, o qual nao contem os metodos que vc esta tentando chamar. Para funcionar, voce precisa fazer cast para o tipo correto. No main, mude para isso:

// Saida
System.out.println
         ("Centro Rectangle: "+((CenteredShape)figura[0]).getCenterX()+
          " e "+ ((CenteredShape)figura[0]).getCenterY());

Note o cast para CenteredShape

Rafael

rafaelgloria

Funcionou com o cast, o outro jeito, colocando os metodos como abstract na classe shape naum funcionava, eu jah tinha testado, dava erro pq a classe rectangle precisaria ter tb os metodos por herdar da classe abstract shape.
Valeu,
Abs,
Rafael. 8)

J

ooops… eh verdade :oops:

Criado 27 de junho de 2004
Ultima resposta 27 de jun. de 2004
Respostas 4
Participantes 3