티스토리 뷰
반응형
상속 예제2
1. 쇼핑몰
< 상속예제 총정리 1>
1. 홍길동은 쇼핑몰을 운영하려 한다.
쇼핑몰 판매 상품을 상속을 이용하여 프로그램하기
요구사항
- 판매 제품: 화장품(Cosmetics), 청바지(Jeans),
책(Book)에 대한 클래스를 만든다.
- 코드가 중복되지 않도록 상속 관계를 사용한다.
- 부모 클래스는 공통 속성을 담고 있는
Item이라는 클래스 이다.
<속성=필드>
- 공통 속성 : name, price
- 화장품(Cosmetics) : 브랜드(brand), 색상(cololr)
- 청바지 (Jeans) : 사이즈(size)
- 책(Book) : 저자(author), 출판사(publisher)
<출력형태>
***************
이름 : 립스틱
가격 : 25000
브랜드 : 아모레퍼시픽
색상 : Red
***************
이름 : 기모청바지
가격 : 35000
사이즈 : 77
***************
이름 : JAVA
가격 : 35000
저자 : 홍길동
출판사 : 홍길동
=============================
오늘 판매 금액: 95,000원
=============================
판매 제품 이름 : 립스틱 , 기모청바지 , JAVA
package day12.exam;
public class Item {
//1. 인스턴스 필드 - 외부에 노출하지 않음
private String name;
private int price;
//2. 생성자
public Item(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
public void print(){
System.out.println("이름 : " + name);
System.out.println("가격 : " + price);
}
}
//===========================
package day12.exam;
public class Cosmetics extends Item {
private String brand;
private String color;
public Cosmetics(String name, int price, String brand, String color) {
super(name, price);
this.brand = brand;
this.color = color;
}
@Override //재정의
public void print(){
System.out.println("******************");
super.print();//부모의 메서드 호출
//System.out.println("이름 : " + super.getName());
System.out.println("브랜드 : " + brand);
System.out.println("색상 : " + color);
}
}
//===============================
package day12.exam;
public class Jeans extends Item{
private int size;
public Jeans(String name, int price, int size) {
super(name, price);
this.size = size;
}
@Override
public void print(){
System.out.println("***************");
super.print();
System.out.println("사이즈 : " + size);
}
}
//=================================
package day12.exam;
public class Book extends Item {
private String author;
private String publisher;
public Book(String name, int price, String publisher, String author) {
super(name, price);
this.publisher = publisher;
this.author = author;
}
@Override
public void print(){
System.out.println("***************");
super.print();
System.out.println("저 자 : " + author);
System.out.println("출판사 : " + publisher);
}
}
//==============================
package day12.exam;
import day11.exam2.Cosmatics;
import day11.exam2.Jeans;
import java.text.DecimalFormat;
public class WebMain {
public static void main(String[] args) {
int sum = 0;
String nameTotal="";
Cosmatics cos = new Cosmatics("립스틱", 25000,"아모레", "Red");
Jeans jean = new Jeans("기모청바지",35000,77);
Book book = new Book("Java", 35000, "홍길동", "중앙");
cos.print();
jean.print();
book.print();
System.out.println();
System.out.println("======================================");
//총합
DecimalFormat f = new DecimalFormat("#,##0원");
sum = cos.getPrice() + jean.getPrice() + book.getPrice();
System.out.println("오늘 판매 금액 : " + f.format(sum));
System.out.println("======================================");
//제품 이름 나열
nameTotal = cos.getName() + ", " +
jean.getName() + ", " +
book.getName();
System.out.println("판매 제품 이름 : " + nameTotal);
}
}
2. 고객 정보

1. 중앙인터내셜에서는 고객 정보를 가지고 맞춤 서비스
를 제공하려합니다.
그래서 고객관리 프로그램을 구현하기로 하였습니다.
<요구사항>
1) 고객 클래스에는 아이디, 이름, 등급, 포인트,
포인트 적립비율이 필요하다.
2) 고객의 기본 등급을 SIVER로 한다.
3) 고객이 제품을 구매할 경우 누적되는
보너스 포인트가 있다.
4) 고객이 제품을 구매할 때 구매 금액의
일정 비율이 보너스 포인트로 적립되고,
이때 계산되는 적립 비율이 보너스 포인트
적립 비율이다.
5) 기본 적립 비율은 0.1%로 한다.
10000원을 사면 10원이 적립되는 것이다.
6) 우수 고객의 등급은 VIP이다.
7) vip 고객에게는 제품을 살 때 항상
10%할인을 한다.
8) 보너스 포인트를 0.5% 적립해 준다
package day11.exam3;
public class CustomerMain {
public static void main(String[] args) {
Vip vip = new Vip(123, "홍길동", "VIP");
General gn = new General(321, "김자바", "general");
vip.showInfo(100_000);
System.out.println();
gn.showInfo(100_000);
}
}
//===================================
package day11.exam3;
public class Customer {
private int cid; //고객아이디
private String name; //고객명
private String grade; //등급
int point; // 보너스 포인트
int paymentAmount; //결제 금액
double ratio; //적립금
double discountRate;//할인율
// public Customer() {
// grade = "GENERAL"; //기본 등급
// ratio = 0.01; // 기본 적립금
// }
public Customer(int cid, String name, String grade, double ratio, double discountRate) {
super();
this.cid = cid;
this.name = name;
this.grade = grade;
this.ratio = ratio;
this.discountRate = discountRate;
}
private void calcPoint(int price) {
point += (int)(price * ratio);
System.out.println(name + "님의 현재 포인트 누적액은 " + point + "입니다.");
}
private void calcPrice(int price) {
paymentAmount =price - (int)(price*discountRate);
System.out.println(name + "님의 결제금액은 " + paymentAmount + "입니다.");
}
public void showInfo(int price) {
System.out.println(name + "님의 등급은 " + grade + "입니다.");
calcPoint(price);
calcPrice(price);
}
}
//===========================
package day11.exam3;
public class General extends Customer{
final static double DISCOUNTRATE = 0.05;
final static double RATIO = 0.001;
public General(int cid, String name, String grade) {
super(cid, name, grade, RATIO, DISCOUNTRATE);
}
}
//=====================
package day11.exam3;
public class Vip extends Customer{
final static double DISCOUNTRATE = 0.1;
final static double RATIO = 0.005;
public Vip(int cid, String name, String grade) {
super(cid, name, grade, RATIO, DISCOUNTRATE);
}
}
3. 위 2번 내용 upgrade

package day11.exam5;
import static day11.exam5.Grade.*;
public class CustomerMain {
public static void main(String[] args) {
//Customer hong = new Customer(123,"홍길동",Grade.VIP);
Customer hong = new Customer(123,"홍길동",VIP);
hong.showInfo(5000);
System.out.println();
Customer kim = new Customer(124,"김자바",SILVER);
kim.showInfo(5000);
System.out.println();
Customer lee = new Customer(125,"이하늘",VIP);
lee.showInfo(5000);
System.out.println();
}
}
//=======================
package day11.exam5;
public enum Grade {
VIP(10, 0.5), SILVER(5, 0.1); //할인율(10%, 5%), 적립률(0.5%, 0.1%)
private final int discountRate; //할인율
private final double ratio; //적립금 비율
Grade(int discountRate, double ratio) {
this.discountRate = discountRate;
this.ratio = ratio;
}
public int discountRatePrice(int price) {
return price - (price * discountRate) / 100;
}
public int pointRatio(int price) {
return (int)(price * ratio / 100);
}
}
//===================
package day11.exam5;
public class Customer {
//#1. 필드
private int cid; //고객아이디
private String name; //고객명
Grade grade; //고객의 등급
//결제와 관련된 것은 다른 class로 분리하는 것도 고려
private int paymentAmount; //결제 금액
private int point ; //포인트
//#2. 생성자
public Customer(int cid, String name,Grade grade) {
super();
this.cid = cid;
this.name = name;
this.grade = grade;
}
//#3. 메소드
//#3-1. 포인트 계산, 결제금액
private void calcPrice(int price) {
point += grade.pointRatio(price);
paymentAmount = grade.discountRatePrice(price);
}//end of calcPrice
//#3-2. 출력 처리
private void printInfo() {
System.out.println(name + "님의 등급은 " + grade + "입니다.");
System.out.println(name + "님의 현재 포인트 누적액은 " + point + "입니다.");
System.out.println(name + "님의 결제 금액은 " + paymentAmount + "입니다.");
}
//#3-3. 정보 출력-외부에서 호출해서 사용
public void showInfo(int price) {
calcPrice(price);
printInfo();
}//end of showInfo
}//end of class
'JAVA' 카테고리의 다른 글
| 추상 클래스 (0) | 2025.03.27 |
|---|---|
| 상속(inheritance) (0) | 2025.03.26 |
| 상속 기초 예제1 (1) | 2025.03.26 |
| 상속 및 다형성 (1) | 2025.03.25 |
| 접근 제한자 /패키지/임포드/final 제어자 (1) | 2025.03.25 |
댓글