본문 바로가기

IT일반과목/java

포인트관리(추상화)

실수로 오버라이딩 안한다면 이자포인트가 원래 포인트랑 비슷하게 들어간다.
point라는곳을 무조건 오버로딩할수밖에 없어 라고 명시를 해야겠다.

추상메소드
 -> 미완성된 메소드
 public abstract void test();
//미완성이기 때문에 여기까지만 작성한다.

상속받은녀석이 이걸 반드시 완성해서 써야한다.
추상메소드가 들어있는걸 보고 추상클래스라고 한다.

추상클래스
 -> 일반적으로 추상메소드를 가지고 있는 클래스
 -> abstract class 클래스명 -> 객체화를 막기위해서
 -> 반드시 상속하게 만들기 위해->이런용도로도 쓴다.

public abstract class 클래스명{
추상메소드
}

클래스는 객체의 설계도 -> 추상클래스는 객체화가 안됨

추상클래스는 설계도가 완성이 안되어있다.
그러므로 객체화가 불가능하다.

 

 

==========================================

package kh.java.point.run;

import kh.java.point.controller.PntMgr;
import kh.java.point.model.vo.Gold;
import kh.java.point.model.vo.Silver;
import kh.java.point.model.vo.Vip;
import kh.java.point.model.vo.Vvip;

public class Run {
 public static void main(String[] args) {
   PntMgr mgr = new PntMgr();
   mgr.insertData(new Silver("홍길동","Silver",1000));
   mgr.insertData(new Silver("김말똥","Silver",2000));
   mgr.insertData(new Silver("고길똥","Silver",3000));
  
   mgr.insertData(new Gold("홍길동","Gold",1000));
   mgr.insertData(new Gold("김말똥","Gold",2000));
   mgr.insertData(new Gold("고길똥","Gold",3000));
  
   mgr.insertData(new Vip("홍길동","Vip",1000));
   mgr.insertData(new Vip("김말똥","Vip",2000));
   mgr.insertData(new Vip("고길똥","Vip",3000));
  
   mgr.insertData(new Vvip("홍길동","Vvip",1000));
   mgr.insertData(new Vvip("김말똥","Vvip",2000));
   mgr.insertData(new Vvip("고길똥","Vvip",3000));
  
  
  
   mgr.printData();
 }
}

--------------------------------------------------------------------

package kh.java.point.model.vo;

public class Vvip extends Grade {

 
 public Vvip() {
  
  
 }
 public Vvip(String name, String rank, int point) {
  super(name,rank,point);
 }
 
 @Override
 public double getEija() {
  return getPoint()*0.07;
 }
}

----------------------------------------------------------------

package kh.java.point.model.vo;

public class Vip extends Grade {

 
 public Vip() {
  
 }
 
 public Vip(String name, String rank, int point) {
  super(name,rank,point);
 }
 
 @Override
 public double getEija() {
  return getPoint()*0.05;
 }
 //Grade에서 추상화되어있다면 무조건 에러뜬다.
 
 
}

--------------------------------------------------------------------

package kh.java.point.model.vo;

public class Silver extends Grade {

 
 public Silver() {
  
 }
 public Silver(String name, String rank, int point) {
  super(name,rank,point);
 }//내 생성자를 호출했을때 값3개를 전달해준다. 그럼 grade에 생성자로 바로 간다.
 
 @Override//부모객체에있는 Eija를 내가 명시해서 쓸꺼야.
 public double getEija() {
  return getPoint()*0.02;
 }//실버의 이자포인트를 썼다.
 //이렇게 하면 실버 객체가 끝난다.
 //Grade에서 추상화되어있다면 무조건 에러뜬다.
 
 
 
 
//
// public Silver(String name, String rank, int point) {
//
//  this.name=name;
//  this.rank=rank;
//  this.point=point;
// }
//
//
//
// private String name;//이름
// private String rank;//등급
// private int point;//등급
//
// public String getName() {
//  return name;
// }
//
// public void setName(String name) {
//  this.name = name;
// }
//
// public String getRank() {
//  return rank;
// }
//
// public void setRank(String rank) {
//  this.rank = rank;
// }
//
// public int getPoint() {
//  return point;
// }
//
// public void setPoint(int point) {
//  this.point = point;
// }
//
// public double getEija() {
//  return (point*0.02);//정수랑 실수연산하면 어차피 자동형변환이라 강제형변환 안해줘도 된다.
// }
// public void setEija(int point) {
//  this.point = point;
// }
//
//
// public Silver() {
//
// }//기본생성자
//


}

-----------------------------------------------------------------

package kh.java.point.model.vo;

public abstract class Grade {
 private String name;
 private String rank;
 private int point;
 public Grade() {

 }//기본생성자
 public Grade(String name, String rank, int point) {
  this.name = name;
  this.rank = rank;
  this.point = point;
 }


 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getRank() {
  return rank;
 }
 public void setRank(String rank) {
  this.rank = rank;
 }
 public int getPoint() {
  return point;
 }
 public void setPoint(int point) {
  this.point = point;
 }
 public abstract double getEija();
 //다른 곳에서 실제 무조건 상속받아 쓰라는 것이다.

 

 

 

}

--------------------------------------------------------------

package kh.java.point.model.vo;

public class Gold extends Grade {

 
 public Gold() {
  
 }//기본생성자
 
 public Gold(String name, String rank, int point) {
  super(name,rank,point);
 }
 
 
 @Override//부모객체에있는 Eija를 내가 명시해서 쓸꺼야.
 public double getEija() {
  return getPoint()*0.03;//정수랑 실수연산하면 어차피 자동형변환이라 강제형변환 안해줘도 된다.
 }//this안써도된다.
 //Grade에서 추상화되어있다면 무조건 에러뜬다.
 
 
 
 
 
 // private String name;//이름
// private String rank;//등급
// private int point;//등급
// 
// public Gold(String name, String rank, int point) {
//  this.name = name;
//  this.rank=rank;
//  this.point=point;
// }
// 
// 
// 
// 
// public String getName() {
//  return name;
// }
// public void setName(String name) {
//  this.name = name;
// }
// public String getRank() {
//  return rank;
// }
// public void setRank(String rank) {
//  this.rank = rank;
// }
// public int getPoint() {
//  return point;
// }
// public void setPoint(int point) {
//  this.point = point;
// }
 
 
 
 
}

---------------------------------------------------------------

package kh.java.point.controller;

import kh.java.point.model.vo.Gold;
import kh.java.point.model.vo.Silver;
import kh.java.point.model.vo.Vip;
import kh.java.point.model.vo.Vvip;

public class PntMgr {

 int s_index=0;
 int g_index=0;
 int v_index=0;
 int vv_index=0;
 public PntMgr() {

 }//생성자

 Silver [] s = new Silver[10];
 Gold [] g = new Gold[10];
 Vvip [] vv = new Vvip[10];
 Vip [] v = new Vip[10];
 public void insertData(Silver s) {
  this.s[s_index++]=s;
 }
 public void insertData(Gold g) {
  this.g[g_index++]=g;
 }
 public void insertData(Vip v) {
  this.v[v_index++]=v;
 }
 public void insertData(Vvip vv) {
  this.vv[vv_index++]=vv;
 }
 
 
 public void printData() {
  System.out.println("<< =================== information =================== >>");
  System.out.println("이름 \t\t 등급 \t\t 포인트 \t 이자포인트 \t");
  for(int i=0; i<s_index; i++) {
   System.out.printf((i+1)+"%s \t %s \t %d \t\t %.1f\n",s[i].getName(),s[i].getRank(),s[i].getPoint(),s[i].getEija());
  }
  System.out.println("================================================================");
  for(int i=0; i<g_index; i++) {
   System.out.printf((i+1)+"%s \t %s \t\t %d \t\t %.1f\n",g[i].getName(),g[i].getRank(),g[i].getPoint(),g[i].getEija());
  }
  System.out.println("================================================================");
  for(int i=0; i<v_index; i++) {
   System.out.printf((i+1)+"%s \t %s \t\t %d \t\t %.1f\n",v[i].getName(),v[i].getRank(),v[i].getPoint(),v[i].getEija());
  }
  System.out.println("================================================================");
  for(int i=0; i<vv_index; i++) {
   System.out.printf((i+1)+"%s \t %s \t\t %d \t\t %.1f\n",vv[i].getName(),vv[i].getRank(),vv[i].getPoint(),vv[i].getEija());
  }
  
  
  
  
  
  
 }

 

 


}

 

 

 

 

 

'IT일반과목 > java' 카테고리의 다른 글

예금계좌 getter setter  (0) 2018.07.24
합계(인터페이스)  (0) 2018.07.24
포인트관리(상속)  (0) 2018.07.24
포인트관리  (0) 2018.07.24
객체배열, 변수  (0) 2018.07.23