'상속'에 해당되는 글 4건

  1. 2013.06.06 오버라이딩(Overriding)
  2. 2013.06.06 단일상속(single inheritance)
  3. 2013.06.06 클래스간의 관계(포함관계) has-a
  4. 2013.06.06 상속(inheritance)

/*내용을 복사 한 후 이클립스에서

ctrl + shift + F를 눌러주세요!!*/

 

//P.239 오버라이딩~(overriding)
//앞전에 오버로딩에 대하여 MyMath3 으로 만든것이 있었다. 똑같은 예문에 추가로
//오버라이딩에 대하여 정의 해볼께요~~~
//따라와랏!!!

package JavaTest;

//우선 클래스 정의를 합죠! 앞에서 했던거 복사했음 (-_-)v

class MyMath{
 
 int method = 0;
 
 int add(int a, int b) {           //메서드~
  return a + b;
 }

 long add(int a, long b) {      //메서드~
  return a + b;
 } 
  

 long add(long a, int b) {      //메서드~
  return a + b;
 } 
  

 long add(long a, long b) {    //메서드~
  return a + b;
 }
 
 int method(){
  
  return ++method;                       //오버라이딩 추가 설명을 위해 추가함!
 }
}

///////여기까지는 오버로딩인거 알쥐? 매개변수 값만 달리 해주는것!~~~ Pass~~~

 

class MyMath6 extends MyMath{      //자~ 위에 MyMath 를 상속 받아 보았습니다.
 
 //오버라이딩 시작하겠습니다. 위에 있는 첫번째 메서드를 변경하겠습니다.!
 
 int add(int a, int b){            //이거 오버라이딩이얌! 위에꺼 그대로 똑같이 써놓고 먼 말이냐고?
  return a + b;                 //상황상 왼쪽은 이렇게 써놓았지만 내용은 완전히 다르게 하는거쥐~
 }                                      // 아~ 이 예문은 아무래도 적절치 않은것으로 보인다 하나더 추가할께!
 
 int method(){                   //자 이 예문을 보면 이해가 되나?? 역시 자바의 세계는 헷갈려~~
  
  return --method;                       // (~_~)/
 }
 
}

public class MyMath4 {

 public static void main(String[] args) {

  MyMath6 mm = new MyMath6();

  System.out.println(mm.add(3, 3));
  System.out.println(mm.add(3, 3L));
  System.out.println(mm.add(3L, 3));
  System.out.println(mm.add(3L, 3L));
  System.out.println(mm.method());   //요놈이 바로 메서드 오버라이딩을 해서 나온값입뉘다!!!

 }

}

//전에 적어 놨던 예문 때문에 조금 헷갈리고 난잡해 보이지만 '오버로딩'도 기억할겸 같이 적어서 만들어 보았음!
//책의 예문은 너무 이론에만 충실해서리.. 참고하길 바래요~

'::::특별한 Java Story' 카테고리의 다른 글

제어자,static,final  (0) 2013.06.08
Super,Super() 조상클래스 생성자 만들기  (0) 2013.06.07
단일상속(single inheritance)  (0) 2013.06.06
클래스간의 관계(포함관계) has-a  (0) 2013.06.06
상속(inheritance)  (0) 2013.06.06
Posted by 옆모습오빠
:

/*내용을 복사 한 후 이클립스에서

ctrl + shift + F를 눌러주세요!!*/

 

//P.235 단일상속(single inheritance)
//결론인즉~~~ class TVCR extends TV,VCR 머 이런식으로 TV클래스와 VCR 클래스를 한꺼번에
//다중상속을 받을수 없다고 한다.. 그래 알았어..잘 기억할께! 근데!!!!!!!!!!!!!!!!!!!
//밑에 예문을 보아하니 얼래????????? 굳이 써야 한다면 다음 예문처럼도 가능은 하다는것을 보여주는듯하다.
//예문을 파헤쳐 보자!

package JavaTest;

class Tv1{         //Tv 클래스 맹글었엉~홍홍!
 
 boolean power;            //인스턴스 변수 선언~에효 지겹다..이쯤 됐으면 이제 이건 주석 처리 안해도
 int channel = 11;                  // 돼지??
 
 void power(){               //간지좀 나게 메서드 power,channelUp,channelDown 이렇게 세게 맹듬!
  power =! power;
 }
 
 void channelUp(){
  ++channel;
 }
 
 void channelDown(){
  --channel;
 }
}

class VCR{         //VCR 클래스 만듬~
 
 boolean power;           //앗! 클래스에 있는 파워랑 똑같은 놈이다..ㅋㅋ
 int channel = 12;
 int counter = 0;           //넌 뭐냐? (-_-)a
 
 void power(){
  power =! power;
 }
 
 void channelUp(){
  ++channel;
 }
 
 void play(){                 //책에 있는거 다 쓸 필요성 못느껴 한개만 쓴다.ㅋ봐주라~
 }
 
}

class TVCR1 extends Tv1{        //오~~ Tv 클래스 상속받았숨돠~~!! 잘보세용   (is-a)
 
 VCR vcr = new VCR();        //얼래?! VCR 클래스를 포함 관계로 또 받았숨돠~!    (has-a)  두개 다 이렇게 받아쓰면 된다!이거지!
 
 int channel = vcr.channel;   //Tv클래스에서 상속 받은 channel 대신에 VCR 클래스에서 포함관계로 받은
                                           //channel을 사용하겠다 라고 하네욤! 한번 진짜 그런지 main 가서 출력!
 void play(){
  vcr.play();
 }
 
 void channelUp(){
  vcr.channelUp();             //뭐~ 이런거지..위에꺼 하나 보면 전부다 보일거야!
 }                                     
 
}

public class TVCR {

 public static void main(String[] args) {

  TVCR1 tr = new TVCR1();             //우선 TVCR1 클래스 인스턴스 시키고!
  System.out.println(tr.channel);       // 역시 결과값은 포함관계를 명시해준 놈이 출력됐어...알겠지?!
  
 }

}

//뭐 ~ 나름 놓칠수 있는 부분이었기에 이렇게 한번 정리 하는거임! 잘 기억하자!!

'::::특별한 Java Story' 카테고리의 다른 글

Super,Super() 조상클래스 생성자 만들기  (0) 2013.06.07
오버라이딩(Overriding)  (0) 2013.06.06
클래스간의 관계(포함관계) has-a  (0) 2013.06.06
상속(inheritance)  (0) 2013.06.06
변수의 초기화  (0) 2013.06.04
Posted by 옆모습오빠
:

/*내용을 복사 한 후 이클립스에서

ctrl + shift + F를 눌러주세요!!*/

 

//P.232 클래스 (포함관계)
//앞전은 상속을 공부했어~
//뒷장은 바로 포함관계지... 나누어 놨더군~
//예문은 쉽다~
//① 상속(inheritance) 는 '~은 ~ 이다'                 is-a 관계
//② 포함(composite) 은 '~은 ~ 을 가지고 있다'       has-a 관계
// 책을 쭉 읽어 봤으면 상속을 쓸건지 포함을 쓸건지 정도는 쉽게 알수 있을 것 같다.
//P.230쪽 예문보다는 P.232 예문이 더 길고 스릴이 넘치는 관계로 P.232 예문으로 정리해볼께!

package JavaTest;


//우선 클래스를 정의한당~ 책은 자꾸 클래스가 먼저 안나오는데..책을 때로는 무시도 해보자..ㅋㅋ

class Card{
 
 static final int kind_max = 4; // 세현이 씹탱 이거 무슨 변수냐?! 또 틀리면 죽인다!
 static final int num_max = 13; // 카드 종류 4개, 넘버는 13개 우선 이렇게 클래스 변수 선언!
 
 static final int spade = 4;
 static final int diamond = 3;
 static final int heart = 2;
 static final int clover = 1;
 
 int kind;
 int number;                        // 인스턴스 변수 각각 선언~
 
 Card(){                              // 카드 생성자 만들었엉~ 매개변수 하나도 없는...
  this(spade,1);                // 빨간줄 뜨지?! 이거 기억나면 좋을텐데.. this() 지금 매개변수가 하나도없는
 }                                      //Card() 생성자는 매개변수가 두개 있는 생성자를 복사해서 쓴다라는거 기억나지?
                                        // 코딩할때 이렇게 생각하고 쓴거얌! 밑에다가 그럼 두개짜리 만들어보자!
 
 Card(int kind,int number){     //자 여기서 매개변수 2개짜리 만들면 위에 빨갱이가 사라짐!
  this.kind = kind;               //kind 와 number를 각각 자기 자신을 표현해줌~~~
  this.number = number;
 }
 
 public String toString(){        //toString이라는 메서드 하나 만들께염~뒤에서 배울 Object 클래스-모든 클래스의 조상뉨!
  
  String kind = "";              //문자열 초기값 설정은 "" 표로 해주면 됩니당용!
  String number = "";
  
  switch(this.kind){                      //스위치문 그냥 싫어! 어저께 교수님이 문제 내줄때도 맘에 안들었음!
  case 4 : kind = "spade"; break;
  case 3 : kind = "diamond"; break;
  case 2 : kind = "heart"; break;
  case 1 : kind = "clover"; break;
  }
  
  switch(this.number){
  case 13 : number = "K"; break;
  case 12 : number = "Q"; break;
  case 11 : number = "J"; break;
  default : number = this.number + "";
  
  }
  
  return kind+","+number;      //    toString() 메서드의 리턴값을 한번 받아 보겠습니다.~~~
 }
 
}

//여기까지 Card 클래스 끝! 확실한건 책에 적혀 있는 순서대로 코딩하면 이해가 안돼..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 


//여기서 부터는 Deck 이라는 클래스 코딩~

class Deck{   //잠깐!! 영어 공부!! deck 은 원래 '(배의)갑판',층 뭐 이런 뜻이다. 미쿡!에서는 숙어적인 의미로
                // '카드 한벌' or '카드 한통' 정도의 의미이더라~ 더럽게 난해한 단어 쓰고 X랄 이야.ㅠ
 final int card_num = 52;       //어라?! final 이 또 나타났네..이건 일단 패스~ 뒤에서 배울거임
                                         //우선은 최종값? 정도로 정리하자! 어쨌든 인스턴스 변수선언!
 
 Card c[] = new Card[card_num];    //자~ 요놈 위에 Card 클래스를 '포함관계(has-a)' 로 나타냈어!
                                                  //나름 이번 예문의 핵심이니 잘 보도록 하장! 배열은 짜증나지만...
 
 Deck(){                  //매개변수가 하나도 없는 생성자 만듬
  
  int i = 0;            // 넌 뭐니? 초기화? for 문 때문에 i 값 초기화를 해뒀음
  
  for (int k = Card.kind_max; k > 0 ; k--) {     
   for (int n = 1; n < Card.num_max+1; n++) {
    c[i++] = new Card(k,n);
   }
  }
  
  //썅~ 설명의 고비가 찾아왔다..ㅋㅋ;; 직설적 설명들어감..;; 카드 종류는 1씩 줄여라..(4,3,2,1)로..
  //카드 숫자는 1씩 증가해라.. 해당하는 값을 표현해라..와..이거 설명해주기 되게 힘드네..for 문은 이래서 짜증나.
 }
 
 Card pick(int index){    // 매개변수 한개 있는 pick 메서드 .....근데...Card가 왜 있는지 모르겠다...ㅠ_ㅠ알려줘
  
  if(index>=0 && index<card_num){
   return c[index];
  }else{
   return pick();       //매개변수 없는 pick() 메서드 호출 밑에서 또 만들어야 겠네
  }
 }
 
 Card pick(){
  
  int index = (int)Math.random()*card_num;  // 똑같이 형변환 시켜주고~
  return pick(index);            //리턴값으로 매개변수 한개있는 매서드를 호출 ..왔다갔다 하네..그려~
 }
 
 void shuffle(){    //메서드`
  
  for (int n = 0; n < 1000; n++) {
   int i = (int)(Math.random()*card_num);
   Card t = c[0];               
   c[0] = c[i];                   //이 친구들은 서로 값을 바꾸는것! 자주봤으니 설명은 pass~~!
   c[i] = t;
  }
 }
}

//여기까지 Deck 클래스 끝...Deck 클래스 정말 짜증난다.. 역시 카드는 변수가 너무 많아서 힘들어~~ㅠ


public class DeckTest {

 public static void main(String[] args) {

  //이제 신나게 한번 뽑아서 놀아봅시다!
  Deck d = new Deck();              //Deck 클래스 인스턴스~
  Card c = d.pick(0);                   //젤 위에꺼 일단 뽑아주시고~
  System.out.println(c);
  
  d.shuffle();                             //섞어 주시고~~
  c = d.pick(0);                          //또 젤 위에꺼 뽑아주시고~
  System.out.println(c);
  
 }

}

//아..코드 분석하는 중에 뛰쳐 나갈뻔했다..ㅠ_ㅠ 이 예문은 내일 또 보도록 해야지;;; 헷갈리는것도 많고....

//설명이 틀린것도 있지 않을까 싶다..;

'::::특별한 Java Story' 카테고리의 다른 글

오버라이딩(Overriding)  (0) 2013.06.06
단일상속(single inheritance)  (0) 2013.06.06
상속(inheritance)  (0) 2013.06.06
변수의 초기화  (0) 2013.06.04
클래스메서드(static 메서드) 와 인스턴스메서드  (0) 2013.06.03
Posted by 옆모습오빠
:

/*내용을 복사 한 후 이클립스에서

ctrl + shift + F를 눌러주세요!!*/

 

//P.227 상속
//상속..그래 하도 많이 봐서 알겠는데..언제 써먹냐가 가장 중요한 문제지..
//간단히 줄이면 한군데만 수정할테니 니들이 가져다 써~..ㅋㅋ 뭐 이런식이겠지?
//예문으로 갑니다!

package JavaTest;

class Tv{                  //Tv 클래스 한개 만들고~

 boolean power;    // 전원 켰다 껐다..OK?
 int channel;          // 요건 채널이고~
 
 void power(){          // ①번 메서드 맹글고~ 얜 파워On/Off 메서드
  power =! power;
 }
 
 void channelUp(){    // ②번 메서드 얜 채널 올리고~
  ++channel;
 }
 
 void channelDown(){  // ③번 메서드 얜 채널 내리고~~
  --channel;
 }
 
 // 여기까지 하고 잠깐!! 나 밑에다가 이 Tv클래서 녀석 상속받는 클래스를 하나 설계할건데...
 // 책 열심히 본사람은 알거야~ 위에 메서드는 상속 된다? 안된다?  ....된다!!!
 // 잠깐 해깔리지 말자! 메서드까지는 상속되고, ..앞에서 공부한 '생성자'는 상속이 안된다.!!!^
 // 대충보고 넘어가지 말고, 외워라 임뫄~! 주입식 교육이 최고얌!
}

class CaptionTv extends Tv{      //상속 키워드 'extends'써주고.. Tv를 상속했숨돠~
 
 // Tv 클래스의 power 와 channel 은 상속됐으니 적지 않아도~~
 boolean caption;   //caption?? 뭐 자막을 키거나 끄는것 같당~ㅋ 쓸데없다~
 
 void displayCation(String text){
  if(caption==true){                      //자꾸 책은 삭제해도 된다..개념이 강해서 짜증나..난 true 를 써줬어!
   System.out.println(text);          //true 일때 출력하라 String text 값(매개변수값을~~)
  }
 }
}


public class CaptionTvTest {

 public static void main(String[] args) {

  // 클래스의 인스턴스 변수를 써먹자!
  CaptionTv ct = new CaptionTv();   //두개의 클래스중에서 Tv를 상속받은 CaptionTv클래스만 인스턴스시킴!
  
  ct.power = true;      //CaptionTv에 없는 power변수를 썼어~ 상속됐으니 지맘이겠지.ㅋ
  ct.channel = 11;       //채널도 썼어~(부모클래스(Tv클래스)에 있는놈)
  ct.channelUp();        //부모클래스에 있는 채널업! 메서드도 썼엉~
  System.out.println(ct.channel);    //Up시킨 다음 채널 값을 물어보는 거겠지?
  
  ct.caption = false;                //자식클래스(자기자신)에 있는 if 문 caption 값!~~ true 로 바꿔보셈!
  ct.displayCation("세현아 롤 그만해 죽여버릴거야!");
  
 }

}

//보다가 틀린것 있으면 말해~ 이제 생성자 시작일뿐~

Posted by 옆모습오빠
: