추상 메소드 구현
// 추상메소드가 사용된 클래스는 반드시 abstract 써야 한다.
abstract class Shape{
public abstract void area();
public abstract void circum();
}
class Circle extends Shape{
int r;
final double pi = 3.14;
// 생성자 초기화 해야한다.
public Circle(int r) {
this.r = r;
}
// abstract 사용한 메소드(area, circum)는 반드시 overriding을 해줘야 한다.
@Override
public void area() {
System.out.println("반지름이 "+r+" 인 원의 면적="+(r*r*pi));
}
@Override
public void circum() {
System.out.println("반지름이 "+r+" 인 원의 둘레="+(2*r*pi));
}
}
class Rectangle extends Shape{
int width; // 가로
int height; // 세로
// 생성자 초기화 해야한다.
public Rectangle(int width, int height) {
super();
this.width = width;
this.height = height;
}
// abstract 사용한 메소드(area, circum)는 반드시 overriding을 해줘야 한다.
@Override
public void area() {
System.out.println("가로가 "+width+" 세로가 "+height+" 인 사각형의 넓이="+(width*height));
}
@Override
public void circum() {
System.out.println("가로가 "+width+" 세로가 "+height+" 인 사각형의 둘레="+(2*(width+height)));
}
}
public class AbstarctTest {
public static void main(String[] args) {
// 명령형 매개변수 circle 5 입력
// 반지름이 5인 원
if(args.length == 2 && args[0].equalsIgnoreCase("circle")){
Circle c = new Circle(Integer.parseInt(args[1]));
c.area(); // 면적
c.circum(); // 원면적
}
// 명령형 매개변수 rect 5 6 입력
// 가로 5 세로 6인 Rectangele 객체 생성
else if(args.length == 3 && args[0].equalsIgnoreCase("rect")){
Rectangle r = new Rectangle(
Integer.parseInt(args[1]),
Integer.parseInt(args[2]));
r.area(); // 면적
r.circum(); // 원면적
}
// 공통적 area() ; 면적 / circum() ; 둘레 호출
// 실행할 수 있도록 강제적 구현
}
}