class Circle {
    private int radius; // 반지름
    public Circle(int radius) { this.radius = radius; }
    public int getRadius() { return radius; } // radius 값을 반환함
}

public class NamedCircle extends Circle { // Circle을 부모 클래스로 사용한 NamedCircle 클래스
    String name; // 클래스명에 명시한 것 처럼 이름을 담을 변수
    public NamedCircle(int circle, String name) {
        super(circle); // 부모 클래스의 생성자에 circle 매개변수를 담아 실행
        this.name = name;
    }

    public void show() { // Circle의 이름과 반지름의 길이를 보여줌.
        System.out.println(name+", 반지름 = " + super.getRadius());
    }

    public static void main(String[] args) {
        NamedCircle w = new NamedCircle(5, "Waffle"); // 반지름이 5이며 이름이 "Waffle"인 NameCircle w생성
        w.show(); // 메소드 호출
    }
}
import java.util.Scanner;

abstract class Calculator {
    protected int a, b;
    abstract protected int calc();
    protected void input() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("정수 2개를 입력하세요>>");
        a = scanner.nextInt();
        b = scanner.nextInt();
    }

    public void run() {
        input();
        int res = calc();
        System.out.println("계산된 값은 " + res);
    }
}

class Adder extends Calculator {
    @Override
    protected int calc() {
        return super.a + super.b;
    }
}

class Subtracter extends Calculator {
    @Override
    protected int calc() {
        return super.a - super.b;
    }
}

public class App {
    public static void main(String[] args) {
        Adder adder = new Adder();
        Subtracter sub = new Subtracter();

        adder.run();
        sub.run();
    }
}
import java.util.Scanner;

interface StackInterface {
    int length();
    String pop();
    boolean push(String ob);
}

class StringStack implements StackInterface {
    String[] stack = new String[5];
    int length = 0;

    @Override
    public int length() {
        return length;
    }

    @Override
    public String pop() {
        if(length >= 0) {
            return stack[--length];
        }
        return null;
    }

    @Override
    public boolean push(String ob) {
        if(length <= stack.length) {
            stack[length++] = ob;
            return true;
        }
        return false;
    }
}

public class StackManager {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringStack stack = new StringStack();

        for(int i = 0; i < 5; i++) {
            String word = scanner.next();
            stack.push(word);
        }

        for(int i = 0; i < 5; i++) {
            System.out.print(stack.pop() + " ");
        }
    }
}
interface Shape {
    final double PI = 3.14;
    void draw();
    double getArea();
    default public void redraw() {
        System.out.println("--- 다시 그립니다. ---");
        draw();
    }
}

class Circle implements Shape {
    int radius;
    double area;

    public Circle(int radius) {
        this.radius = radius;
    }

    @Override
    public void draw() {
        System.out.print("반지름 " + radius+ " ");
        this.area = (radius * radius) * PI;
    }

    @Override
    public double getArea() {
        return area;
    }
}

public class ShapeApp {
    public static void main(String[] args) {
        Shape coin = new Circle(10);
        coin.redraw();

        System.out.println("코인의 면적은 " + coin.getArea());
    }
}