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
Was this helpful?