10/5 15-4 interface(인터페이스 연습)
추상화처럼 도형의 면적 구하기 인터페이스로 연습 해 보자
클래스와 동일하게 인터페이스 하나당 자바파일(.java) 하나가 원칙임!
1. figure 인터페이스
public interface Figure {
void area(String figureName); 추상메소드
}
2. Drawable 인터페이스
public interface Drawable {
void draw(String figureName); 추상메소드
}
1.FigureData 클래스
public class FigureData {
int width,height,radius;
[인자 생성자]
public FigureData(int radius) {
this.radius = radius;
}
public FigureData(int width, int height) {
this.width = width;
this.height = height;
}
}
2.Triangle 클래스
public class Triangle extends FigureData implements Figure, Drawable {
public Triangle(int width, int height) {
super(width, height);
}
@Override
public void draw(String figureName) {
System.out.println(figureName+"을 3개의 선으로 그리다");
}
@Override
public void area(String figureName) {
System.out.println(figureName+"의 면적:"+(int)(width*height*0.5));
}
}
3.Rectangle 클래스
public class Rectangle extends FigureData implements Figure,Drawable {
public Rectangle(int width, int height) {
super(width, height);
}
@Override
public void draw(String figureName) {
System.out.println(figureName+"을 4개의 선으로 그리다");
}
@Override
public void area(String figureName) {
System.out.println(figureName+"의 면적:"+width*height);
}
}
4.Circle 클래스
public class Circle extends FigureData implements Figure, Drawable {
public Circle(int radius) {
super(radius);
}
@Override
public void draw(String figureName) {
System.out.println(figureName+"을 하나의 선으로 연결해서 그리다");
}
@Override
public void area(String figureName) {
System.out.println(figureName+"의 면적:"+(int)(radius*radius*Math.PI));
}
}
메인
public static void main(String[] args) {
Figure f = new Rectangle(100,100);
f.area("사각형");
f.draw("사각형");
((Rectangle)f).draw("사각형");
((Drawable)f).draw("사각형");
Drawable d = new Triangle(100, 100);
d.draw("삼각형");
((Triangle)d).area("삼각형");
((Figure)d).area("삼각형");
d= new Circle(100);
d.draw("원");
((Circle)d).area("원");
((Figure)d).area("원");