본문 바로가기

JAVA 프로그래밍

추상 클래스

/*
  abstract class 정의
  - 상속 전용으로 객체를 만들 수 없다
  - 추상 메소드는 함수의 정의만을 하고 하위 클래스에서 구현한다.
 
 abstract class 클래스 이름
 {
  멤버변수
  메소드
  생성자
  abstract 반환형 메소드이름(매개변수,...)  //추상메소드 선언.
 }
*/
abstract class Employee {   //추상클래스로 선언
 String name;
 
 public abstract int income(); //바디가 없는 추상 메소드
 public Employee(String n)  //정상적으로 선언된 메소드
 {
  name = n;
 }
 public void getInformation()
 {
  System.out.println("이름 : "+name+", 봉급 : "+income());   //추상메소드 income() 사용.
 }
}


--HourlyWorker.java
public class HourlyWorker extends Employee{
 int pay_per_hour = 2000;
 int work_hour = 8;
 
 public HourlyWorker(String name)
 {
  super(name);
 }
 public int income()    //슈퍼클래스의 추상메소드를 구현
 {
  return work_hour *pay_per_hour;
 }
}

--MonthlyWorker
public class MonthlyWorker extends Employee{
 int pay_per_hour = 2000;
 int work_hour = 8;
 int work_month = 1;
 
 public MonthlyWorker(String name)
 {
  super(name);
 }
 public int income()    //슈퍼클래스의 추상메소드를 구현
 {
  return (work_hour * pay_per_hour) * (work_month * 20);
 }
}

--WeeklyWorker.java
public class WeeklyWorker extends Employee{
 int pay_per_hour = 2000;
 int work_hour = 8;
 int work_week = 1;
 
 public WeeklyWorker(String name)
 {
  super(name);
 }
 public int income()    //슈퍼클래스의 추상메소드를 구현
 {
  return (work_hour * pay_per_hour) * (work_week * 5);
 }
}


--AbstractTest.java
public class AbstractTest {
 public static void main(String[] args) {
  HourlyWorker employee1 = new HourlyWorker("백승민");
  employee1.getInformation();
  WeeklyWorker employee2 = new WeeklyWorker("서은석");
  employee2.getInformation();
  MonthlyWorker employee3 = new MonthlyWorker("임나영");
  employee3.getInformation();
 }

}

'JAVA 프로그래밍' 카테고리의 다른 글

Generic  (0) 2009.10.07
내부 클래스  (0) 2009.10.07
Interface(인터페이스)  (0) 2009.10.07
static 메소드  (0) 2009.10.07
CallingThis  (0) 2009.10.07