Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 국민취업지원제도
- 국비학원
- 인코딩
- 내배카
- emmet환경설정
- 검색기능
- 정처기
- 입력메소드
- forward
- 로그아웃
- live server 환경설정
- 비밀번호암호화
- 관리자회원조회
- 비밀번호변경
- 페이지 재사용
- 회원정보수정
- 권한변경
- jdbc설정
- redirect
- mvc
- jdbc환경설정
- 회원탈퇴
- 국취제
- github
- jsp기본
- 내일배움카드
- 배열
- 별찍기
- Git
- 페이징
Archives
- Today
- Total
기록
*16일차 실습 본문
*포인트 관리 시스템
@실습문제 - 포인트관리시스템의 entity클라스의 상속관계만들기
회원등급을 추상화하여 Member클래스를 작성해 중복을 제거하세요.
package member.model.vo;
public class Silver extends Member{
public Silver() {}
public Silver(String name, String grade, int point) {
super(name, grade, point);
}
@Override
public double getEjapoint(){
return super.getPoint() * 0.02;
}
}
---------------------------------------------
package member.model.vo;
public class Gold extends Member{
public Gold() {}
public Gold(String name, String grade, int point) {
super(name, grade, point);
}
@Override
public double getEjapoint(){
return super.getPoint()*0.05;
}
}
---------------------------------------------
package member.model.vo;
public class Vip extends Member{
public Vip(){}
public Vip(String name, String grade, int point){
super(name, grade, point);
}
@Override
public double getEjapoint(){
return super.getPoint() * 0.1;
}
}
---------------------------------------------
package member.model.vo;
public class VVip extends Member {
public VVip(){}
public VVip(String name, String grade, int point){
super(name, grade, point);
}
@Override
public double getEjapoint(){
return super.getPoint()*0.15;
}
}
---------------------------------------------
package member.model.vo;
public class Member {
/*
* protected로 지정하면 자식 클래스에서 직접 접근 가능하다.
* Member의 자식클래스 Gold Silver Vip VVip에서는 직접 접근할 수 있다.
*
* 단, 커스텀클래스를 상속하는 경우에는 protected 지정가능하지만,
* jdk가 제공하는 어떤 캡슐화된 클래스를 상속한다면, protected로 변경할 수 없다.
* -> super생성자를 통해 값세팅 & getter,setter 이용
*
*/
private String name;
private String grade;
private int point;
public Member(){}
public Member(String name, String grade, int point) {
this.name = name;
this.grade = grade;
this.point = point;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
//부모타입에서는 등급별 이자율을 구체화할 수 없기 때문에 기본이자율(Silver)로 계산해두고, 자식객체쪽에서 구현하게 한다.
public double getEjapoint(){
return point * 0.02;
}
}
---------------------------------------------
package member.controller;
import member.model.vo.Gold;
import member.model.vo.Silver;
import member.model.vo.VVip;
import member.model.vo.Vip;
public class MemberManager {
Silver[] s= new Silver[10];
Gold[] g = new Gold[10];
Vip[] v = new Vip[10];
VVip[] vv = new VVip[10];
int silverIndex = 0;
int goldIndex = 0;
int vipIndex = 0;
int vvipIndex = 0;
public void silverInsert(Silver s) {
this.s[silverIndex++] = s;
}
public void goldInsert(Gold g) {
this.g[goldIndex++] = g;
}
public void vipInsert(Vip v){
this.v[vipIndex++] = v;
}
public void vvipInsert(VVip vv){
this.vv[vvipIndex++] = vv;
}
public void printData() {
System.out.println("----------------------------------------<<회원정보>>-----------------------------------------");
System.out.printf("%-15s %-15s %-15s %-15s\n", "이름","등급","포인트","이자포인트");
System.out.println("------------------------------------------------------------------------------------------------");
for(int i=0; i<silverIndex;i++) {
System.out.printf("%-15s %-15s %-15d %-15.2f\n", s[i].getName(), s[i].getGrade(), s[i].getPoint(), s[i].getEjapoint());
}
for(int i=0; i<goldIndex;i++) {
System.out.printf("%-15s %-15s %-15d %-15.2f\n", g[i].getName(), g[i].getGrade(), g[i].getPoint(), g[i].getEjapoint());
}
for(int i=0; i<vipIndex; i++){
System.out.printf("%-15s %-15s %-15d %-15.2f\n", v[i].getName(), v[i].getGrade(), v[i].getPoint(), v[i].getEjapoint());
}
for(int i=0; i<vvipIndex; i++){
System.out.printf("%-15s %-15s %-15d %-15.2f\n", vv[i].getName(), vv[i].getGrade(), vv[i].getPoint(), vv[i].getEjapoint());
}
}
}
---------------------------------------------
package member.run;
import member.controller.MemberManager;
import member.model.vo.Gold;
import member.model.vo.Silver;
import member.model.vo.VVip;
import member.model.vo.Vip;
public class Run {
public static void main(String[] args){
MemberManager m = new MemberManager();
m.silverInsert(new Silver("홍길동", "Silver",1000));
m.silverInsert(new Silver("김말똥", "Silver",2000));
m.silverInsert(new Silver("고길동", "Silver",3000));
m.goldInsert(new Gold("김회장", "Gold",1000));
m.goldInsert(new Gold("이회장", "Gold",2000));
m.goldInsert(new Gold("오회장", "Gold",3000));
//vip추가
m.vipInsert(new Vip("최순실", "Vip",10000));
//vvip추가
m.vvipInsert(new VVip("박근혜", "VVip",100000));
m.printData();
}
}
* getEjaPoint메소드는 부모클래스에 정의한후, 각 회원별로 오버라이딩 할것
@실습문제 : SmartPhone, Desktop의 공통요소를 부모클래스 Computer로
작성하기( 생략)
상속관계 다시 설정하기
* java에서는 다중상속은 지원하지 않는다.
package kh.java.inheritance.product.after;
public class Desktop extends Computer {
private String monitor;
private String keyboard;
private String mouse;
public Desktop() {
super();
// TODO Auto-generated constructor stub
}
public Desktop(String brand, String code, String name, int price,
String os, String monitor, String keyboard, String mouse) {
// this.brand = brand;
// this.code = code;
// this.name = name;
// this.price = price;
// 1.setter 이용해서 private필드에 값대입하기
// setBrand(brand);
// setCode(code);
// setName(name);
// setPrice(price);
// 2.부모생성자를 호출 : 생성자에 딱한번, 맨위줄에서만 사용가능
// this와 같이 사용불가. 생략해도 자동으로 super() 호출된다.
super(brand, code, name, price, os);
this.monitor = monitor;
this.keyboard = keyboard;
this.mouse = mouse;
}
public String getMonitor() {
return monitor;
}
public void setMonitor(String monitor) {
this.monitor = monitor;
}
public String getKeyboard() {
return keyboard;
}
public void setKeyboard(String keyboard) {
this.keyboard = keyboard;
}
public String getMouse() {
return mouse;
}
public void setMouse(String mouse) {
this.mouse = mouse;
}
/**
* brand, code, name, price는 상속받았지만, private필드라 직접접근할 수 없다.
* public method를 통해 접근할 수 있다.
* @return
*/
public String getDesktopInfo() {
return this.getComputerInfo() + ", " + this.monitor + ", " + this.keyboard + ", " + this.mouse;
}
}
--------------------------------------------------------
package kh.java.inheritance.product.after;
public class SmartPhone extends Computer {
private String carrier; // 통신사
public SmartPhone() {
super();
// TODO Auto-generated constructor stub
}
// source - generate constructor using fields - super constructor to invoke
public SmartPhone(String brand, String code, String name, int price, String os, String carrier) {
super(brand, code, name, price, os);
this.carrier = carrier;
}
public String getCarrier() {
return carrier;
}
public void setCarrier(String carrier) {
this.carrier = carrier;
}
public String getSmartPhoneInfo() {
return this.getComputerInfo() + ", " + carrier;
}
}