언어/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}));
}
}
[결과]
반응형