המשימה
נתונה המחלקה **המופשטת** Shape עם פעולה מופשטת area ופעולה מופשטת name. מחלקה מופשטת אינה ניתנת ליצירה — היא רק מגדירה מה כל צורה חייבת לדעת לעשות. בנה שתי מחלקות שיורשות ממנה: • Circle — תכונה radius. השטח: π·r². השם: circle. • Rect — תכונות width ו-height. השטח: מכפלה. השם: rect. ובנוסף, **פעולה חיצונית** שמקבלת מערך של Shape ומחזירה את הצורה בעלת השטח הגדול ביותר. הנחיות: • השתמש ב-Math.PI ולא ב-3.14. • הפעולה החיצונית אינה יודעת ואינה צריכה לדעת באיזו צורה מדובר — היא קוראת ל-area, והשפה בוחרת בזמן ריצה את המימוש הנכון. זו כל מהות הפולימורפיזם, ולכן אין בפעולה הזו שום בדיקת טיפוס. • אתחל את המקסימום לאיבר הראשון. [טבלה]
קוד הפתיחה
abstract class Shape {
public abstract double area();
public abstract String name();
}
class Circle extends Shape {
// תכונה: radius
public Circle(double radius) {
// אתחל
}
@Override
public double area() {
// כתוב את הפתרון כאן — Math.PI
return 0;
}
@Override
public String name() {
return ""; // circle
}
}
class Rect extends Shape {
// תכונות: width, height
public Rect(double width, double height) {
// אתחל
}
@Override
public double area() {
return 0;
}
@Override
public String name() {
return ""; // rect
}
}
public class Main {
/** מחזירה את הצורה בעלת השטח הגדול ביותר — בלי לבדוק טיפוסים. */
public static Shape largest(Shape[] arr) {
// כתוב את הפתרון כאן
return arr[0]; // מציב זמני
}
public static void main(String[] args) {
Shape[] shapes = {
new Circle(2),
new Rect(4, 5),
new Circle(1),
new Rect(2, 3)
};
for (int i = 0; i < shapes.length; i++) {
System.out.println(shapes[i].name() + " " + shapes[i].area());
}
System.out.println(largest(shapes).name()); // rect
System.out.println(largest(shapes).area()); // 20.0
}
}
כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.