언어/Java

기초 #5. 추상클래스 (ex. 계산기 프로그램)

뭉지(moonz) 2020. 8. 22. 12:28
반응형

 

추상?

추상이란, 실체들 간에 공통되는 특성을 추출한 것이다. ex) 삼각형, 사각형, 원 -> 모양, 그리기 등

 

추상 클래스?

실체 클래스(서브)들의 공통되는 필드와 메소드를 정의 한 클래스이다.

  • 실체클래스의 부모 역할이어야 한다. 단독X
  • 추상클래스는 온전한 클래스가 아니기때문에 (new연산자로) 인스턴스 생성을 못한다. (상속받은 자식클래스에서 생성 가능하다.)

추상 메서드 : 실체 클래스(서브)들의 공통되는 메서드. (정의만)

실체 클래스 : 추상 클래스의 메서드를 구현하는 클래스.

실체 메서드 : 추상메서드를 구현. (오버라이딩-메서드 이름은 동일하지만 실행내용이 다른 메서드.)

 

간단한 를 들면,

Animal()이라는 추상클래스가 있고, 여기에는 Sound()라는 추상 메서드를 정의한다.

public abstract class Animal {		//추상클래스이자 부모클래스 Animal
    public void breathe() {
    	System.out.println("숨을 쉽니다.");
    }
    public abstract void Sound() {};
    public void run() {			//추상클래스에도 일반메서드 정의&구현할 수 있음.
    	breathe();
        Sound();
    }
}

 

Animal()를 상속받는 Cat(), Dog() 클래스들은 Sound()를 구현하는 메서드를 오버라이딩해야한다.

public class Cat extends Animal {		//추상클래스 Animal 상속받은 Cat
	public void Sound() {
    	System.out.println("야옹!");
    }
}
public class Dog extends Animal {		//추상클래스 Animal 상속받은 Dog
	public void String {
    	System.out.println("멍멍!");
    }
}

 

main 메서드로 Cat 클래스, Dog 클래스의 각 객체를 생성한 후,

그 객체로 메서드에 접근하면 각각의 클래스의 메서드가 실행된다. 

public class Main {
	public static void main(String[] args) {
    	Cat cat = new Cat();
        Dog dog = new Dog();

        cat.run();
        System.out.println("--------------------------");
        dog.run();
    }
}

결과

 

 

[예제] 계산기 프로그램

[참고]

추상클래스 Calculator에는 추상메서드 add,substract,average 가 있다.

클래스 GoodCalc은 추상 클래스 Calculator를 상속받는다.

메인에서 GoodCalc클래스 객체 c를 생성해서 호출한다.

 

[코드]

추상메서드를 정의한 추상클래스

abstract class Calculator {	
	abstract int add(int a, int b);
    abstract int substract(int a, int b);
    abstract double average(int[] c);
}

추상 클래스를 상속받는 클래스

class GoodCalc extends Calculator {
	int add(int a, int b) {
    	return a+b;
    }
    int substract(int a, int b) {
    	return a-b;
    }
    double average(int[] a) {
    	double sum = 0;
        for (int i=0;i<a.length;i++)
        	sum+=a[i];
        return sum/a.length;
    }
    
    public static void main(String[] args) {
    	GoodCalc c = new GoodCalc();		//객체 생성할 수 있는 클래스는 GoodCalc
        System.out.println(c.add(5,10));
        System.out.println(c.substract(10,5));
        System.out.println(c.average(new int[] {2,3,4,6}));
    }
}

[결과]

 

반응형