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