Abstract(추상클래스) EX

JK·2022년 12월 22일
0

JAVA

목록 보기
14/28
post-thumbnail

ex1. 한식집 1, 2, 3호점을 만들고 지점별 메뉴 가격을 다르게 하여 메뉴판 출력하기

  • 결과
=== 1호점 ===
김치찌개 : 5,000원
부대찌개 : 5,000원
순대국 안 팔아
비빔밥 : 6,000원
공기밥 : 1,000원
=== 2호점 ===
김치찌개 : 5,000원
부대찌개 : 5,000원
순대국 : 5,000원
비빔밥 : 5,000원
공기밥 : 무료
=== 3호점 ===
김치찌개 : 6,000원
부대찌개 : 7,000원
얼큰순대국 : 6,000원
비빔밥 : 7,000원
공기밥: 1,000원

1. 추상클래스 HeadQuarterStore

  • storeName 변수 선언
  • 매개변수 storeName인 생성자 선언
  • 메뉴들 추상메소드 선언
package com.lec.ex01_store;

public abstract class HeadQuarterStore {
	public String storeName;

	public HeadQuarterStore(String storeName) {
		this.storeName = storeName;
	}
	public abstract void kimchi(); 
	// 추상메소드 : 나를 상속한 클래스에서 반드시 override 해라
	//          메소드의 선언만 있을 뿐, 구현은 없다
	public abstract void bude();
	public abstract void bibim();
	public abstract void sunde();
	public abstract void gonggibab();
	public String getStoreName() {
		return storeName;
	}
	public void setStoreName(String storeName) {
		this.storeName = storeName;
	}
}

2. HeadQuarterStore를 상속받은 Store1

  • 상속받은 추상클래스의 추상메소드 Override
package com.lec.ex01_store;

public class Store1 extends HeadQuarterStore {

	public Store1(String storeName) {
		super(storeName);
	}
	@Override
	public void bude() {
		System.out.println("부대찌개 : 5,000원");
	}
	@Override
	public void sunde() {
		System.out.println("순대국 안 팔아");
	}
	@Override
	public void kimchi() {
		System.out.println("김치찌개 : 5,000원");
	}
	@Override
	public void bibim() {
		System.out.println("비빔밥 : 6,000원");
	}
	@Override
	public void gonggibab() {
		System.out.println("공기밥 : 1,000원");
	}
}

3. HeadQuarterStore를 상속받은 Store2

package com.lec.ex01_store;

public class Store2 extends HeadQuarterStore {

	public Store2(String storeName) {
		super(storeName);
	}
	@Override
	public void bude() {
System.out.println("부대찌개 : 5,000원");
	}
	@Override
	public void bibim() {
		System.out.println("비빔밥 : 5,000원");
	}
	@Override
	public void gonggibab() {
		System.out.println("공기밥 : 무료");
	}
	@Override
	public void kimchi() {
		System.out.println("김치찌개 : 5,000원");
	}
	@Override
	public void sunde() {
		System.out.println("순대국 : 5,000원");
	}
}

4. HeadQuarterStore를 상속받은 Store3

package com.lec.ex01_store;

public class Store3 extends HeadQuarterStore {

	public Store3(String storeName) {
		super(storeName);
	}
	@Override
	public void kimchi() {
		System.out.println("김치찌개 : 6,000원");
	}
	@Override
	public void bude() {
		System.out.println("부대찌개 : 7,000원");
	}
	@Override
	public void bibim() {
		System.out.println("비빔밥 : 7,000원");
	}
	@Override
	public void sunde() {
		System.out.println("얼큰순대국 : 6,000원");
	}
	@Override
	public void gonggibab() {
		System.out.println("공기밥: 1,000원");
	}
}

5. StoreMain

package com.lec.ex01_store;

public class StoreMain {

	public static void main(String[] args) {
		HeadQuarterStore[] stores = {
				new Store1("=== 1호점 ==="),
				new Store2("=== 2호점 ==="),
				new Store3("=== 3호점 ===") };
		for(HeadQuarterStore store : stores) {
			System.out.println(store.getStoreName());
			store.kimchi();
			store.bude();
			store.sunde();
			store.bibim();
			store.gonggibab();
		}//확장for문
	}//main
}//class

ex2. shape

  • 원, 삼각형, 사각형 도형을 만들고 넓이 설정하기
  • Shape를 상속받은 도형 클래스
  • 추상메소드를 Override하여 각 도형의 넓이 공식 재선언, 어떤 도형인지 재선언
  • 결과
원도형을 그려요
넓이는78.5398
삼각형도형을 그려요
넓이는25.0
사각형도형을 그려요
넓이는200.0

1. Circle

package com.lec.ex04_shape;

import com.lec.cons.Constant;

public class Circle extends Shape {
	private int r;

	public Circle() {
	}

	public Circle(int r) {
		this.r = r;
	}

	@Override
	public double area() {
		return Constant.PI * r * r;
	}

	@Override
	public void draw() {
		System.out.print("원");
		super.draw();
	}
}

2. Rectangle

package com.lec.ex04_shape;

public class Rectangle extends Shape {
	private int w; // 가로
	private int h; // 세로

	public Rectangle() {
		super();
	}

	public Rectangle(int w, int h) {
		super();
		this.w = w;
		this.h = h;
	}

	@Override
	public double area() {
		// TODO Auto-generated method stub
		return w * h;
	}

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.print("사각형");
		super.draw();
	}
}

3. Triangle

package com.lec.ex04_shape;

public class Triangle extends Shape {
	private int h; // 높이
	private int w; // 밑변

	public Triangle() {
		super();
	}

	public Triangle(int h, int w) {
		super();
		this.h = h;
		this.w = w;
	}

	@Override
	public double area() {
		return h * w * 0.5;
	}

	@Override
	public void draw() {
		System.out.print("삼각형");
		super.draw();
	}
}

4. TestMain

package com.lec.ex04_shape;

public class TestMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Shape[] shape = { new Circle(5), new Triangle(10, 5), new Rectangle(10, 20) };// array
		for (Shape s : shape) {
			s.draw();
			System.out.println("넓이는" + s.area());
		}
	}// main
}// class

ex3. 정직원과 아르바이트의 월급 명세서

  • 공통 변수인 이름
  • 매개변수가 이름인 생성자
  • 월급 메소드
  • 상여금
  • 정직원은 연봉에서 월급, 아르바이트는 시급에서 월급
  • 결과
~ ~ ~ 월급명세서 ~ ~ ~
성 함 :홍길동
월 급 : 3428571
상 여 :171428
~ ~ ~ 월급명세서 ~ ~ ~
성 함 :강동원
월 급 : 5000000
상 여 :250000
~ ~ ~ 월급명세서 ~ ~ ~
성 함 :김고은
월 급 : 1857142
~ ~ ~ 월급명세서 ~ ~ ~
성 함 :홍길구
월 급 : 970000
~ ~ ~ 월급명세서 ~ ~ ~
성 함 :김길자
월 급 : 1600000

1. Employee

package com.lec.quiz;

public abstract class Employee {
	private String name;
	
	public Employee(String name) {
		super();
		this.name = name;
	}
	public abstract int computePay();		//월급

	public final int computeIncentive() { //상여금 = 월급이 300만원이 넘으면 5프로
		int temp = computePay();
		if(temp >= 3000000)				
			return (int)(temp * 0.05);
		return 0;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

2. HourlyEmployee

  • 아르바이트
package com.lec.quiz;

public class HourlyEmployee extends Employee {
	private int hoursWorked;		//일한 시간
	private int moneyPerHour;		//시급

	public HourlyEmployee(String name, int hoursWorked, int moneyPerHour) {
		super(name);
		this.hoursWorked = hoursWorked;
		this.moneyPerHour = moneyPerHour;
	}

	@Override
	public int computePay() {		//월급 = 시간 x 시급
		// TODO Auto-generated method stub
		return hoursWorked * moneyPerHour;
	}
}

3. SalaryEmployee

  • 정직원
package com.lec.quiz;

public class SalaryEmployee extends Employee {
	private int annalSalary;		//연봉
	
	public SalaryEmployee(String name, int annalSalary) {
		super(name);
		this.annalSalary = annalSalary; 
	}
	
	@Override
	public int computePay() {	//연봉(월급 12번 + 상여금 2번)을 월급으로 나눈 값
		return annalSalary / 14;
	}
}

4. Main

package com.lec.quiz;

public class Main {

	public static void main(String[] args) {
		Employee[] sawon = {		//정직원, 아르바이트 데이터 넣기
				new SalaryEmployee("홍길동", 48000000),
				new SalaryEmployee("강동원", 70000000),
				new SalaryEmployee("김고은", 26000000),
				new HourlyEmployee("홍길구", 100,9700),
				new HourlyEmployee("김길자", 160,10000)};
		
		for(Employee temp : sawon){		//월급 명세서 출력하기
			System.out.println("~ ~ ~ 월급명세서 ~ ~ ~");
			System.out.println("성 함 :"+temp.getName());
			System.out.println("월 급 : "+temp.computePay());
			//System.out.println("상 여 : "+ temp.computeIncentive());
			int tempIncen = temp.computeIncentive();
			if(tempIncen!=0){
				System.out.println("상 여 :"+ tempIncen);
			}//if
		}//확장for
	}//main
}//class
profile
씨앗 개발자

0개의 댓글