計算正方形或矩形的面積。 幫助,所以我必須應用繼承,覆蓋,也許重載取決於語句,在這裏,當我嘗試計算矩形的面積結果爲0.0我相信這是因爲我的asignar(分配)方法在子類不覆蓋一個來自超類。 此外,這個程序是否有效地繼承和覆蓋(除了我遇到的問題)?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.具有「side」的AreaF類有什麼好處? 2.對於我來說'Cuadrado'必須從'Rectangulo'繼承,因爲正方形是矩形的邊緣情況,其高度和寬度都相等。 –
您的主要問題是,當您要求插入基座時,您創建了兩個對象'obj'和'obj2',您只需在'obj'這裏設置'obj.asignar(b);'然後您問是否它是一個矩形或方形,當用戶選擇了一個你從未設置過的矩形'obj2.asignar(b);'因此你將永遠有一個矩形爲0。 –
好吧,如果你想用Square和Rectangle來擴展AreaF,我會建議把它改成帶有函數的接口來返回這個區域。現在,您在技術上覆蓋(添加可選的'@ Override'註釋)。 –