[QUASE-RESOLVI]puxando o método de um tipo classe por outros metodos/classes[ajuda plz]

e aí galera, sou novo no fórum…

estudei um poco de java por conta própria e agora to num curso na eibnet… então ocorreu o seguinte
hoje em uma das aulas tive um excercício que eu criaria a classe Formas, que teria um método abstrato desenhar
criaria uma classe Medidas que seria usado como tipo de dado(Medidas m;)
e depois objetos como circulo que iam desenvolver o desenhar()

tive duvida na aula, depois consegui fisgar um pouco, cheguei em casa querendo refazer pra aprofundar, mas no meu objeto circulo não to conseguindo fazer o setRaio…

aí vai o código simplificado…

classe medidas

[code]public class Medidas {

public static final double PI = 3.1415;

private double raio;

        public double getRaio() {
	return raio;
}

public void setRaio(double raio) {
	this.raio = raio;
}[/code]

formas

[code]public abstract class Formas {

Medidas m;

// construtor
public Formas(){

}

public Medidas getMedidas() {
	return m;
}

public void setMedidas(Medidas m){
	this.m = m;
}[/code]

e aqui onde eu empaquei

[code]public abstract class Circulo extends Formas{

public Medidas setRaio(double raio){
	
}[/code]

no set tentei enfiar de tudo quanto é jeito… tipo
Formas().setRaio(raio)

não to lembrando mais :confused:

se pudessem me explicar o que eu tenho que fazer e porquê(opcional :P) eu agradeceria muito!

opa, consegui sacar agora…

tive que fazer getMedidas().setRaio(numero);

agora vai eu acho :b

-------------------///------------------------

então, na IDE ficou tudo certo depois disso…

[code] public static void main(String[] args) {

	Medidas m = new Medidas();
	Circulo c = new Circulo();
	
	c.setRaio(2.0);
	System.out.println(c.getRaio());
	c.desenhar();[/code]

tava tudo bonitinho mas na hora de rodar deu esse erro…

Exception in thread “main” java.lang.NullPointerException
at br.com.formas.modelos.Circulo.setRaio(Circulo.java:7)
at br.com.formas.main.DemoFormas.main(DemoFormas.java:12)

Dica 1: NullPointerException acontece somente quando alguém esqueceu de instanciar e atribuir um objeto à uma variável.

Dica 2: Tente fazer os programas sem usar gets e sets.

opa, valeu pelas dicas bruno :slight_smile:

descobri mais ou menos o que houve…

na classe formas se eu não instanciar Medidas ele vai dar nullpointer…
MAS se não me engano o excercício era sobre usar Medidas como um tipo de dado complexo, ou será que eu to viajando…

pq eu tive impressão que apenas se criava a classe, importava e usava-se ela como um tipo de dado, sem precisar instanciar
mas talvez só tive a impressão errada, vcs que conhecem mais por favor me dêem uma luz

[quote=BrenoSalgado]opa, valeu pelas dicas bruno :slight_smile:

descobri mais ou menos o que houve…

na classe formas se eu não instanciar Medidas ele vai dar nullpointer…
MAS se não me engano o excercício era sobre usar Medidas como um tipo de dado complexo, ou será que eu to viajando…

pq eu tive impressão que apenas se criava a classe, importava e usava-se ela como um tipo de dado, sem precisar instanciar
mas talvez só tive a impressão errada, vcs que conhecem mais por favor me dêem uma luz
[/quote]

Tipo de dado complexo: Qualquer estrutura que agregue mais de um tipo de dados simples.

Classes são somente moldes dos quais objetos serão criados. Objetos não existirão até os instanciemos.

Quanto ao exercício:

Forma é um conceito abstrato do qual você pode tirar formas concretas, como Círculo, Quadrado, Triângulo. Dessa maneira, Círculo é um Forma, Quadrado é uma Forma, Triângulo é uma Forma.

Com esse texto já podemos tirar que Forma será pelo menos uma classe abstrata, e que Círculo, Quadrado e Triângulo são classes concretas que especializam o conceito de forma, portanto usamos a palavra-chave extends.

Outra parte é que Forma tem o método encarregado de desenhar sua própria forma. Porém, Forma é abstrato, e só podemos desenhar formas concretas. Desse jeito, quem tem a implementação de desenhar a si mesmo são Círculo, Quadrado e Triângulo. Os três terão seus próprios métodos desenhar que implementarão aquele definido em Forma.

Quanto à medida, metro, centímetro, quilômetro são medidas de distância, raio é somente uma propriedade da forma, no caso, somente do Círculo. Quadrado terá as medidas dos seus lados(que como é um quadrado, são todas a mesma), e triângulo tem a medida de seus três lados (e se quiser também, de seus ângulos internos).

Com isso você terá atributos diferentes que podem estar dentro de cada forma, e todos são medidas:

Medida raio;
Medida lado;
Medida ângulo;

E medida sempre tem um valor e uma unidade de medida para ela. Esses são os dois atributos da classe Medida.