正方形または長方形の面積を計算します。 ヘルプ、継承を適用する、オーバーライドする、おそらくステートメントに応じてオーバーロードする必要があります。ここで私は矩形の面積を計算しようとすると結果は0.0です。私はそれがサブクラス内のasignar(assign)メソッドがオーバーライドしていないためです1つはスーパークラスからのものです。 また、このプログラムは継承と上書きを効果的に適用しますか?Java(継承)に関する問題のオーバーライド
import java.io.*;
class AreaF {
private double lado; // side
public void asignar(double b) {
lado = b;
}
public double traerL() {
return lado;
}
}
class Cuadrado extends AreaF {
public double area() {
double a;
a = Math.pow(traerL(), 2);
return a;
}
}
class Rectangulo extends AreaF {
private double altura; // height
public void asignar(double h) {
double altura = h;
}
public double area() {
double a;
a = traerL() * altura;
return a;
}
}
public class Pro2 {
public static void main(String[] args) throws IOException {
double b = 0, h = 0;
int op;
Cuadrado obj = new Cuadrado(); // square
Rectangulo obj2 = new Rectangulo(); // rectangle
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Ingrese la base: ");
try {
b = Double.parseDouble(br.readLine());
} catch (NumberFormatException x) {
System.out.println(x);
}
obj.asignar(b);
/**
* 1 - for square
* 2 - for rectangle
*/
System.out.println("Ingrese 1 para saber el area de CUADRADO, 2 para RECTANGULO");
op = Integer.parseInt(br.readLine());
if (op == 1) {
System.out.println("El area del cuadrado es: " + obj.area()); // sq
// area
} else if (op == 2) {
System.out.println("Ingrese la altura del rectangulo: "); // height
try {
h = Double.parseDouble(br.readLine());
} catch (NumberFormatException x) {
System.out.println(x);
}
obj2.asignar(h);
System.out.println("El area del rectangulo es: " + obj2.area()); // rct
// area
} else
System.out.println("Error!");
}
}
私にはわかりませんが、クラス階層は奇妙に見えます: 1. "面"を持つクラス "AreaF"のメリットは何ですか? 2.私には、CuadradoはRectanguloから継承されなければならないように見えます。正方形は高さと幅が等しい長方形の辺の場合です。 –
あなたの主な問題は、あなたが 'obj.asignar(b);'の 'obj'で設定したベースを挿入するように頼んだら、' obj'と 'obj2'の2つのオブジェクトを作成した後、ユーザが決して 'obj2.asignar(b); 'を設定しなかった矩形を選択したときの矩形または正方形であるため、矩形には常に0が設定されます。 –
SquareとRectangleでAreaFを拡張したい場合は、その領域を返す関数を持つインターフェイスに変更することをお勧めします。今のように、あなたは技術的にオーバーライドしています(オプションの '@ Override'アノテーションを追加してください)。 –