Objeto em uma subclasse

olá pessoal! Estou com uma dúvida aqui, como faço para instanciar um objeto de uma subclasse?

Estou fazendo assim mas está com erro:



package raio;


public class Raio {

    
    
    public static void main(String[] args) {
         
  
        raio1 perimetro = new raio1(); //diz que falta o construtor...
    }

}

class raio1{
    int r1;
    double r2;
    byte r3;
    float r4;
    long r5;
    public raio1 (int x){r1 = x;}
    public raio1 (double x){r2 = x;}
    public raio1 (byte x){r3 = x;}
    public raio1 (float x){r4 = x;}
    public raio1 (long x){r5 = x;}
    
    
}

Sim falta o construtor default
é só adcionar

public raio1 (){} 

Sua classe raio1 NÃO possui nenhum construtor sem PARÂMETROS.
Note que você criou apenas construtores que recebam um PARÂMETRO.

Obs.: NÃO é permitido criar duas classes (classe Raio e raio1) dentro de um mesmo arquivo.

[quote=furutani]Sim falta o construtor default
é só adcionar

public raio1 (){} 

hummm deu certo hehe! vlw! jaja coloco outra dúvida sobre este programa!

saquei, não sabia disso, mas e como que funciona uma subclasse??? Achei que uma subclasse era várias classes dentro do mesmo arquivo!!

É permitido sim.

O que não pode ter é duas classes public dentro de um mesmo arquivo E você tentar executar a classe que não tem o mesmo nome que o arquivo.

Saquei então!

Mas pq quando eu coloco este método ele diz que o retorno é vazio?

class raio1{ double r; public raio1 (int x){r = x;} public raio1 (double x){r = x;} public raio1 (byte x){r = x;} public raio1 (long x){r = x;} public raio1 (){ return (double) 2*Math.PI*r;} // metodo type is void public void raio1 (){}

quero colocar os métodos para calcular o perimetro da circunferencia dentro desta classe, mas ele diz que está void… pq?

arrumei tava aki:

public double raio1 (){ return (double) 2*Math.PI*r;}// agora deu certo!

Pessoal, como que eu faço para o usuário entrar com o valor do raio e empregar este valor nos métodos?? eu devo usar a classe Scanner??


package raio;


public class Raio {  
    
    public static void main(String[] args) {       
       
        raio1 redondo = new raio1(); 
        
        System.out.printf("informe o raio: ");
    }

}
    class raio1{   
    double r;
    public raio1 (int x){r = x;}
    public raio1 (double x){r = x;}
    public raio1 (byte x){r = x;}    
    public raio1 (long x){r = x;}
    public raio1 (float x){r = x;}    
    public double perimetro(){return (double) 2*Math.PI*r;} // metodo type is void
    public double AreaCirculo(){return (double) Math.PI*r*r;}
    public double VolumeEsfera(){return (double) (4*Math.PI*r*r*r)/3;} 
    public raio1 (){} 
}

fiz assim mas está com erro, ele inicia com 0

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

    raio1 redondo = new raio1();

    System.out.println("informe o raio: " + redondo.r);
    System.out.println("Valor do perímetro: \n" + redondo.perimetro() +
            "valor da área: \n" + redondo.AreaCirculo() +
            "valor do volume da esfera: " + redondo.VolumeEsfera());
}

}
class raio1{
double r;
public raio1 (int x){r = x;}
public raio1 (double x){r = x;}
public raio1 (byte x){r = x;}
public raio1 (long x){r = x;}
public raio1 (float x){r = x;}
public double perimetro(){return (double) 2Math.PIr;} // metodo type is void
public double AreaCirculo(){return (double) Math.PIrr;}
public double VolumeEsfera(){return (double) (4Math.PIrrr)/3;}
public raio1 (){}
}[/code]

então pessoal o problema é este aki:
"Construa uma subclasse que receba um valor raio, que pode ser passado por byte, int, long, float, double. crie metodos distintos p/ retornar em double o perimetro da circunferencia, a area do circulo e o volume da esfera…

É permitido sim.

O que não pode ter é duas classes public dentro de um mesmo arquivo E você tentar executar a classe que não tem o mesmo nome que o arquivo.[/quote]

Confirmando o que o Bruno informou, acrescenta-se:

[quote]
“vc poderá colocar todas as classes em um unico arquivo, contanto q tenha
apenas uma (ou nenhuma) classe publica, e que essa classe(publica) tenha o
mesmo nome do Arquivo!”

Elvis
[/quote] Íntegra

um exemplo:

[code]import java.util.Scanner;

class Test {
public static void main(String[] args) {
System.out.println(“Informe o raio:”);
Scanner scanner = new Scanner(System.in);
Raio raio = new Raio(Double.parseDouble(scanner.next())); // aqui pode ocorrer uma exceção se o valor digitado não for numérico ou tiver virgula no lugar do ponto flutuante.
System.out.println("Valor do perímetro: " + raio.getPerimetro());
System.out.println("valor da área: " + raio.getAreaCirculo());
System.out.println("valor do volume da esfera: " + raio.getVolumeEsfera());
}
}

class Raio {
private double raio;

public Raio() {
}

public Raio(double raio) {
	this.raio = raio;
}

public double getRaio() {
	return raio;
}

public double getPerimetro() {
	return (double) 2 * Math.PI * raio;
}

public double getAreaCirculo() {
	return (double) Math.PI * raio * raio;
}

public double getVolumeEsfera() {
	return (double) (4 * Math.PI * raio * raio * raio) / 3;
}

}[/code]

Notei que o problema envolve subclasses.

Quando falamos de subclasses, normalmente isso está ligado ao conceito de herança, a subclasse sendo a filha da superclasse. No teu caso acho que teria uma superclasse FormaRadial, e subclasses Circulo e Esfera. Pergunte p/ o professor.

Uma classe dentro de outra o nome dado é classe interna.

Só mais uma dica de convenção… Use Iniciais Maiúsculas para nomes de Classes…

No mais… vc está quase lá… O que vc precisa ???

1 - Receber a entrada do usuário;

2 - Enviar essa entrada para o construtor do Raio1;

3 - Calcular os valores do que vc quer de fato e exibir na tela;

Só está faltando acertar o passo 1…

Falows :wink: