자바 추상클래스 (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());
}
}
'Java' 카테고리의 다른 글
자바 상속 (Java Inheritance) (0) | 2023.03.05 |
---|---|
자바 ArrayList (Java ArrayList) (0) | 2023.03.04 |
자바 객체 지향 프로그래밍 OOP (Java Object Oriented Programming) (0) | 2023.01.31 |
자바 메소드(Java Method) (0) | 2023.01.28 |
자바 이차원 배열(Java Two-dimensional array) (0) | 2023.01.22 |
댓글