Item 23. Subtyping
class Figure {
// νκ·Έ νλ - νμ¬ λͺ¨μ μ μ
final Shape shape;
// μ¬κ°ν(RECTANGLE)μΌ λλ§ μ¬μ©νλ νλ
double length;
double width;
// λͺ¨μμ΄ μ(CIRCLE)μΌ λλ§ μ¬μ©νλ νλ
double radius;
// CIRCLE νκ·Έλ₯Ό μν μμ±μ
Figure(double radius) {
shape = Shape.CIRCLE;
this.radius = radius;
}
// RECTANGLE νκ·Έλ₯Ό μν μμ±μ
Figure(double length, double width) {
shape = Shape.RECTANGLE;
this.length = length;
this.width = width;
}
double area() {
switch (shape) {
case RECTANGLE:
return length * width;
case CIRCLE:
return Math.PI * (radius * radius);
default:
throw new AssertionError(shape);
}
}
enum Shape {RECTANGLE, CIRCLE}
}Subtyping(νμ νμ
)
Last updated