본문 바로가기
Java

자바 추상클래스 (Java abstract class)

by wanttosleep1111 2023. 3. 5.

자바 추상클래스 (Java abstract class)

 

1. 추상화

  • 클래스 간의 공통점을 찾아내서 공통의 조상을 만드는 작업
  • 상속 계층도를 따라 올라갈수록 클래스의 추상화는 더욱 심화된다.

2. 구체화

  • 상속을 통해 클래스를 구현, 확장하는 작업
  • 상속 계층도를 따라 내려올수록 클래스는 더 구체적이다.

 

3. 추상 메소드, 추상 클래스

  • 추상 메소드
    선언되어 있으나 구현되어 있지 않은 메소드 (중괄호가 없는 메소드)
    abstract 키워드를 사용하여 선언
    추상 메소드는 서브 클래스(자식 클래스)에서 오버라이딩이 필수
  • 추상 클래스
    추상 메소드를 하나라도 가진 클래스
    abstract 키워드를 사용하여 선언
    추상 클래스는 일반 메소드를 가질 수 있으며, 일반 메소드만 가지고 있더라도 추상 클래스로 만들 수 있다.
    추상 클래스의 객체는 생성할 수 없다.
    상속 관계에서 서브 클래스가 반드시 구현해야 함을 알릴 때 (강제성) 필요
    설계와 구현의 분리 ( 슈퍼 클래스에서는 개념적 특징 정의, 서브 클래스에서는 구체적 행위 구현)

 


 

▶ 예제 월급 계산 프로그램 만들기

 

package onlyPractice;

public  abstract class Employee {

	
	String empno;
	String name;
	int pay;
	
	public abstract int getMoneyPay();
	
	public String print() {
		return empno+" : "+name+" : "+pay;
	}
	
	
}
package onlyPractice;

public class RegularEmployee extends Employee {

	int bonus;

	public RegularEmployee(String empno, String name, int pay, int bonus) {
		this.empno = empno;
		this.name = name;
		this.pay = pay;
		this.bonus = bonus;
	}

	public int getMoneyPay() {
		return (pay+bonus)/12;
	}

}
package onlyPractice;

public class TempEmployee extends Employee {


	public TempEmployee(String empno, String name, int pay) {
		this.empno = empno;
		this.name = name;
		this.pay = pay;
	}

	public int getMoneyPay() {
		return pay/12;
	}

}
package onlyPractice;

public class PartTimeEmployee extends Employee {

	int workDay;
	
	public PartTimeEmployee(String empno, String name, int pay, int workDay) {
		this.empno = empno;
		this.name = name;
		this.pay = pay;
		this.workDay = workDay;
	}

	public int getMoneyPay() {
		return pay*workDay;
	}

	
}
package onlyPractice;

public class EmployeeMain {

	public static void main(String[] args) {

		RegularEmployee person1 = new RegularEmployee("onlyPractice001", "유재석", 4000, 400);
		TempEmployee person2 = new TempEmployee("onlyPractice002", "박명수", 3000);
		PartTimeEmployee person3 = new PartTimeEmployee( "onlyPractice003", "정준하", 10, 10);
		
		System.out.println(person1.print());
		System.out.println(person2.print());
		System.out.println(person3.print());
		
		System.out.println();
		
		System.out.println(person1.getMoneyPay());
		System.out.println(person2.getMoneyPay());
		System.out.println(person3.getMoneyPay());
	
		
	}

}

 

댓글