티스토리 뷰
※문제 : 도형을 정의한 Shape를 조상으로 하는 Circle 클래스와 Rectangle 클래스를 작성 , 생성자는 각 클래스에 맞게 적절히 추가 할것.
(1) 클래스 명 : Circle
- 조상 클래스 : Shape
- 멤버 변수 : double r - 반지름
(2) 클래스 명 : Rectangle
-조상 클래스 : Shape
- 멤버 변수 :
- dobule width = 폭
- double height = 높이
abstract class Shape{ |
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 |
class Point{
int x;
int y;
Point()
{
this(0,0);
}
Point(int x, int y){
this.x=x;
this.y=y;
}
public String toString()
{
return "["+x+","+y+"]";
}
}
abstract class Shape{
Point p;
Shape(){
this(new Point(0,0));
}
Shape(Point p){
this.p = p;
}
abstract double calcArea();
Point getPosition(){
return p;
}
void setPosition(Point p){
this.p = p;
}
}
class Circle extends Shape{
double r;
Circle(double a){
r= a;
}
double calcArea(){
return r*r*3.14;
}
}
class Rectangle extends Shape{
double width;
double height;
Rectangle(int a,int b){
width =a;height =b;
}
double calcArea(){
return width*height;
}
}
public class InterfaceEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
Shape[] arr = {new Circle(5.0),new Rectangle(3,4),new Circle(1)};
double sum = 0 ;
for(int i = 0 ; i < arr.length ; i++)
{
System.out.print(i+"번째 도형의 면적 = ");
System.out.println(arr[i].calcArea());
sum = sum+ arr[i].calcArea();
}
System.out.print("총합 = ");
System.out.println(sum);
}
}
|
cs |
해설
Shape[] 형 배열 arr 에서 배열의 인자가 Circle, Rectangle로 섞여있어도 동일한 Shape를 조상 클래스로 하기 때문에 각각의 면적이 알맞게 구해진다.
여기서 중요한것은 calcArea() 함수의 쓰임이다.
calcArea() 함수는 Shape 블록 내에서 직접 쓰이진 않지만 자식들 내에서 쓰이기 때문에 abstract 형으로 표현하는 것이다.
출력화면
'IT > JAVA' 카테고리의 다른 글
[JAVA] 객체 비교 (0) | 2017.07.14 |
---|---|
[JAVA] 클래스를 상속받아 점의 위치 다루기 (0) | 2017.07.14 |
추상 메소드와 추상 클래스 (0) | 2017.07.13 |
[JAVA] 오버로딩을 활용한 두점사이의 거리 구하기 (0) | 2017.07.13 |
메소드 오버라이딩 (0) | 2017.07.13 |
댓글