Criar super classe e herança

7 respostas
Mariana.Vecci

oiii gente, tenho um programinha que tem as classes Triangulo, Quadrado e Circulo, ele calcula a area, perímetro, raio etc de figuras geométricas, eu gostaria de criar uma super classe chamada Figura e usar herança, para aproveitar os atributos e métodos em comum das subclasses e diminuir o código, mas não sei como o fazer, se puderem ir me ajudando a montar ela eu ficaria agradecida =)

public class Quadrado extends Figura{
   
private double lado;
   
  
public Quadrado(double lado){
 this.setLado(lado);
}
  
public double calculaArea(){  
 return this.getLado() * this.getLado();
}
  
public double calculaPerimetro(){
 return 4 * this.getLado();
}
  
public double getLado(){
 return lado;
}
  
public void setLado(double lado){
 this.lado = lado;
}

}
public class Triangulo extends Figura{
   
private double lado1;
private double lado2;
private double base;
private double altura;
   
public Triangulo(double base, double altura, double lado1, double lado2){
 this.setLado1(lado1);
 this.setBase(base);
 this.setLado2(lado2);
 this.setAltura(altura);
}
  
public double calculaArea(){
 return (this.getBase() * this.getAltura())/2;
}
  
public double calculaPerimetro(){
 return  this.getLado1() + this.getLado2() + this.getBase();
}
  
public double getLado2(){
 return lado2;
}
  
public void setLado2(double lado2){
 this.lado2 = lado2;
}
  
public double getBase(){
 return base;
}
  
public void setBase(double base){
 this.base = base;
}
  
double getAltura() {
 return altura;
}
  
public void setAltura(double altura){
 this.altura = altura;
}
  
public double getLado1(){
 return lado1;
}
  
public void setLado1(double lado){
 this.lado1 = lado;
}
  
}
public class Circulo extends Figura{

private double raio;

public Circulo(double raio){
 this.setRaio(raio);
}

public double calculaArea(){
 return Math.PI * (this.getRaio() * this.getRaio());
}

public double calculaPerimetro(){
 return 2 * Math.PI * this.getRaio();
}

public double getRaio(){
 return raio;
}

public void setRaio(double raio){
 this.raio = raio;
}

}
import javax.swing.JOptionPane;
   
public class Executor {
   
public static void main(String[] args) {
// cria duas instâncias da classe Quadrado
Quadrado q1 = new Quadrado(5);
Quadrado q2 = new Quadrado(8);
   
//cria duas instancias da classe Triangulo
Triangulo t1 = new Triangulo(5,7,3,3);
Triangulo t2 = new Triangulo(8,6,4,4);
  
// cria duas instâncias da classe Circulo
Circulo c1 = new Circulo(5);
Circulo c2 = new Circulo(8);
  
// realiza os calculos de perimetro e área para os objetos do tipo Quadrado e atribui a uma String
String quadrado1 = "A área do quadrado q1 é: "+q1.calculaArea()+"\n" + "E o perimetro é: "+q1.calculaPerimetro();
String quadrado2 = "A área do quadrado q2 é: "+q2.calculaArea()+"\n" + "E o perimetro é: "+q2.calculaPerimetro();
  
// Mostra o perimetro e a área do objeto q1.
JOptionPane.showMessageDialog(null, quadrado1,"O perimetro e a área do objeto q1",JOptionPane.INFORMATION_MESSAGE);
  
// Mostra o perimetro e a área do objeto q2.
JOptionPane.showMessageDialog(null, quadrado2,"O perimetro e a área do objeto q2",JOptionPane.INFORMATION_MESSAGE);
  
//realiza os calculos de perimetro e área para os objetos do tipo Triangulo e atribui a uma String
String triangulo1 = "A área do triangulo t1 é: "+t1.calculaArea()+"\n" + "E o perimetro é: "+t1.calculaPerimetro();
String triangulo2 = "A área do triangulo t2 é: "+t2.calculaArea()+"\n" + "E o perimetro é: "+t2.calculaPerimetro();
  
// Mostra o perimetro e a área do objeto t1.
JOptionPane.showMessageDialog(null, triangulo1,"O perimetro e a área do objeto t1",JOptionPane.INFORMATION_MESSAGE);
  
// Mostra o perimetro e a área do objeto t2.
JOptionPane.showMessageDialog(null, triangulo2,"O perimetro e a área do objeto t2",JOptionPane.INFORMATION_MESSAGE);
  
//realiza os calculos de perimetro e área para os objetos do tipo Circulo e atribui a uma String
String circulo1 = "A área do circulo c1 é: "+c1.calculaArea()+"\n" + "E o perimetro é: "+c1.calculaPerimetro();
String circulo2 = "A área do circulo c2 é: "+c2.calculaArea()+"\n" + "E o perimetro é: "+c2.calculaPerimetro();
  
// Mostra o perimetro e a área do objeto c1.
JOptionPane.showMessageDialog(null, circulo1,"O perimetro e a área do objeto c1",JOptionPane.INFORMATION_MESSAGE);
  
// Mostra o perimetro e a área do objeto c2.
JOptionPane.showMessageDialog(null, circulo2,"O perimetro e a área do objeto c2",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
  
}
public class Figura {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

Obrigadaaa!

7 Respostas

Roger75

Na classe Figura você não precisaria colocar um método main, pois quem vai executar é o Executor. Figura pode ser uma classe abstrata, já que você não instancia um objeto Figura, e sim um Quadrado, Triangulo, etc. Os métodos calculaArea(), calculaPerimetro() também podem ser abstratos, daí você consegue amarrar o sistema, de modo que qualquer classe que for filha de Figura vai ter que implementar os métodos.

Gabriel.Amaral

Como disse o amigo você não precisa do método main na sua classe figura.

Sua classe figura poderia ser assim:

public abstract class Figura {

public abstract double calculaArea();
public abstract double calculaPerimetro();

}

Assim você faz com que todas as classes que estendem a classe figura obrigatoriamente precisem
implementar esses metodos, pois todas as figuras possuem area e perimetro.

Mariana.Vecci

hum, ta, mais ou menos eu entendi :p

mas não sei quais atributos e métodos devo colocar laá, já que as fórmulas são diferentes entre as figuras .. =/

public abstract class Figura {

}

Obrigadinha!

EDIT: postei beem na hora q o Gabriel postouu.. rs rs ..

Então, a classe figura tem os métodos de calcular perímetro e área, mas e ai a fórula dentro do método, como vou diferenciar em cada figura?

Gabriel.Amaral

Então Mariana nesse caso onde cada formula é muito diferente da outra você
não tem como implementar um metodo genérico para todas as figuras.

Criando a classe figura como eu falei, vc apenas obriga se por exemplo definir
retangulo e estender a classe figura, a classe retangulo obrigatoriamente
precisara implementar os metodos calculaArea e calculaPerimetro.

Não existem atributos em comum entre todas as figuras.

Mariana.Vecci

Certo! obrigada!
fiz agora a classe retangulo, como você disse, ai apareceram a base e altura, que ja tinham no triângulo, o que faço? deixo eles só na classe abstrata figura?
olhem como ficou:

public class Retangulo {

private double base;
private double altura;

public Retangulo(double base, double altura) {

	this.base = base;
	this.altura = altura;
}



public double getBase() {
	return base;
}



public void setBase(double base) {
	this.base = base;
}



public double getAltura() {
	return altura;
}



public void setAltura(double altura) {
	this.altura = altura;
}



public double calculaArea() {
 return base * altura;  
}


public double calculaPerimetro() {
 return 2 * ( base + altura );
}


	//para area: base vezes altura
	//para perimetro: a soma de todos os lados de qualquer que seja o poligono até o retangulo
	
}
Gabriel.Amaral

Essa sua classe retangulo não está estendendo a classe figura. Você está usando alguma IDE de desenvolvimento?

nesse seu caso talvez não tenha muito ganho criando uma herança.
Tente pensar o seguinte: “Oq eu tenho em comum em todas as Figuras?”
e a resposta dessa pergunta é oq vc vai colocar na sua classe pai. Você entende?

Mariana.Vecci

ah, desculpa! foi burrice minha,

public class Retangulo extends Figura

to usando o eclipse

Criado 29 de agosto de 2010
Ultima resposta 29 de ago. de 2010
Respostas 7
Participantes 3