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

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

 

 

//P.371 toString 메서드,  toString()
//객체 지향 배우다~ 자주 나오고 해서... 뒤에서 배우는것이지만 미리 땡겨서 한번 보도록 할께!
//생각보다 내용은 쉽고 간단하다! ...카악~퉤~!
//예문을 보면서 살펴보자~


package JavaTest;

//전에 카드를 통해서 만든 클래스를 가져다 써보도록 하지요~

class Card7{                //여기는 설명 안합니다.ㅋ
 
 String kind;
 int number;
 
 Card7(){
  
  this("Clover",7);
 }
 
 Card7(String kind, int number){
  
  this.kind = kind;
  this.number = number;
 }
 
 /*자~ 여기가 오버라이딩!!! 밑에 먼저 읽고 올라오숑
  * 이 부분을 주석을 풀고 한번 출력해보면~ 변화를 알수 있을거얌!!(-_-)ㅗ
  * 참! 그리고 책에도 강조하던데..오버라이딩 할때는 접근제어자를 최대한 넓혀서~~OK?
  *
 public String toString(){
  
  return kind+"."+number;
 }*/
 
}


public class CardToString {

 public static void main(String[] args) {

 

  Card7 c1 = new Card7();
  
  System.out.println(c1);                  //출력을 두개 작성하였다.
  System.out.println(c1.toString());    //toString ??? 그래!! 바로 이놈이다.
                                                  //결과값도 똑같을거야~
  //toString 은 Object 클래스와 관계가 있다..얘기가 조금 길어 질거 같은데..그래도 들어!!!
  //현재 Card7 클래스 바로 위에~ 조상 클래스인 Object 클래스가 존재한다. toString 메서드
  //를 가지고 있는....왜? 거기에 있냐고?? Object 클래스 한번 읽어봐~ 저놈은 항상 클래스 상위에
  //에서 우리를 귀찮게 하지..ㅋㅋㅋ  현재 출력값은 문자열이 아닌 16진수 해시코드 값을 가지고 있다.
  //왜냐고?? Object 클래스에 있는 toString() 을 ★★★오버라이딩★★★ 하지 않았기 때문에...
  //정말 더러워서 못해먹겠다고?? 할수 없자나..먹고 살려면..ㅠ_ㅠ 썅~ 오버라이딩 해주자~ 
 }
}

 

//참 별것도 아닌 문장인데...많은 것을 생각하게 만든다.. 설명이 어렵다기 보다는 역시 실무에서 이놈을
//발견할려면 아무래도 숙달이 많이 필요하겠지?ㅋㅋㅋ 열공합시당!!!

Posted by 옆모습오빠
:

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

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

 

//클래스메서드(static 메서드) 와 인스턴스메서드

package JavaTest;

class MyMath2{
 
 long a, b;      //<--요놈 뭐게? 바로 인스턴스변수 ~~고유한 값인놈! 끝 외워~
 
 long add(){          //() 요건 멀까? 앞에서 했던건 들어간건 기억나남? 매개변수(a,b)를 위에서 선언해줘서
  return a+b;     // 사실 넣을 필요가 없지! 이런 구조가 싫다면 위에 변수 빼버리고 넣으면 끝
 }
 
 long substract(){
  return a-b;
 }
 
 long multiply(){
  return a*b;
 }
 
 long divide(){           //나누기니깐 쫌..소수점이 나올걸 고려해서..double 강츄! >_<
  return a/b;
 }
 
 ////////////////요기까지가 인스턴스 변수를 이용하여 인스턴스 메서드를 작성한거임
 
 static long add(long a, long b){                    // long a 하공 b 는 클래스변수양 따로 선언 안하고 그냥 메서드에 다해버렸네 그려..
  return a+b;
 }
 
 static long substract(long a, long b){
  return a-b;
 }                                                              //기억 났으면 좋겠어...앞전에 변수 앞에 static 붙이면 (new 어쩌구
                                                                    // 저쩌구) 안붙여도 사용할수 있다는거 기억나심?! 이아이들은 
 static long multiply(long a, long b){             // main 가서 그냥 인스턴스고 뭐고 그냥 막 써도됨..밑에서 잘보심!
  return a*b;
 }
 
 static long divide(long a, long b){
  return a/b;
 }
 
 /////////////여기는 클래스변수로 클래스 메서드를 만든부분~~
}

public class MyMathTest2 {

 public static void main(String[] args) {

  System.out.println(MyMath2.add(20L, 30L));   //봤냐?! 순서 기억하지? static변수나 static메서드나 똑같거든 둘다 불러오는 형식.....클래스명.메서드명(값들)
  System.out.println(MyMath2.substract(20L, 30L));
  System.out.println(MyMath2.multiply(20L, 30L));
  System.out.println(MyMath2.divide(20L, 30L));   //여기까지는 위에 static메서드를 인스턴스 따위도 하지 않고 마음대로 쓸수 있다는것을 보여준거임
  

  ///이제 맨위에서 했던 인스턴스변수와 인스턴스메서드를 쓸차례임...첫번째로 해야할것...기억나지?
  
  MyMath2 mm = new MyMath2();
  
  //인스턴스 메서드는 객체를 생성해야지만 호출이 가능함
  mm.a = 20L;
  mm.b = 30L;
  
  System.out.println(mm.add());
  System.out.println(mm.substract());
  System.out.println(mm.multiply());
  System.out.println(mm.divide());
  
  //System.out.println(mm.add(20L,30L));        이렇게 써도 실행은 됨..긍데 왜 이렇게 쓰면 안될까??
                                                                //인스턴스메서드는 a,b만으로도 충분히 작업이 가능하기 때문에 따로따로
                                                               //매개변수를 줄 필요가 없고,
                                                               //위에 클래스메서드는 인스턴스 변수 없이 매개변수만으로 작업을 수행하기
                                                               //때문에.. 말이 어렵다..?? 코드를 다시 봐봐
 }

}

 

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

상속(inheritance)  (0) 2013.06.06
변수의 초기화  (0) 2013.06.04
인스턴스변수, 클래스(static)변수  (0) 2013.06.03
오버로딩?! 메서드 오버로딩?!  (0) 2013.06.03
인스턴스 메서드  (0) 2013.06.03
Posted by 옆모습오빠
:

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

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

 

//오버로딩?! 메서드 오버로딩?!
//생각보다 쉽다..왜냐고? 진짜 별거 없거든~
//그냥 메서드에서 매개변수 -->  int add()   <--저 메서드에서 괄호안에 들어가는 매개변수만
//달리해주면 그게 오버로딩이래~ 예문을 보면 더 잘 알수 있쥐~~ㅎ
//자 ~ 달려주마! 잘 따라오숑

package JavaTest;

//우선 클래스 정의를 합죠! 앞에서 했던거 참조하장!
class MyMath3{
 int add(int a, int b){
  return a+b;
 }
 
 long add(int a, long b){                         //자~ 왼쪽 보면 메서드 add들이 여러개 있는데 이걸 오버로딩 같은 이름의
  return a+b;                                     //메서드로 처리한게 특징이라고 할 수 있지...요게 바로 오버로딩
 }                                                        //근데 원래는 메서드의 이름이 같으면 안되거든... 그럼 당연히
                                                          // 밑에서 처리할때 어떤 놈을 써줘야 할지 모르거든..그래서 자바에서는 저것들
 long add(long a, int b){                        //을 분리하는 방법으로 add 옆에 괄호 보이지 바로 매개변수의 형태만 전부
  return a+b;                                    //다르게 하면 그 형식에 맞는 놈들을 밑에서 불러다 쓸 수 있게 하는 방식인
 }                                                        //오버로딩을 만든것 같다.. 참으로 별거 아니지만 심오(?)한것 같다..ㅋㅋ
                                                           //아 참고로 리턴값은 오버로딩에는 아무런 영향을 끼치지 않는다고 열라게
 long  add(long a, long b){                     //강조하던데 참고만 하자!ㅋ
  return a+b;
 }
}

//////////자 그럼 밑에서 실제로 한번 써먹어보겠음돠~~~~!

public class OverloadingTest {

 public static void main(String[] args) {

  //클래스 안에 메서드..딱 저들을 보니 저건 '인스턴스 변수들이네...' 인스턴스를 먼저 시켜야 겠고만~~
  MyMath3 mm = new MyMath3();
  
  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));
  
 }

}

 

Posted by 옆모습오빠
:

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

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

 

//클래스메서드(static 메서드) 와 인스턴스메서드

package JavaTest;

class MyMath2{
 
 long a, b;      //<--요놈 뭐게? 바로 인스턴스변수 ~~고유한 값인놈! 끝 외워~
 
 long add(){          //() 요건 멀까? 앞에서 했던건 들어간건 기억나남? 매개변수(a,b)를 위에서 선언해줘서
  return a+b;     // 사실 넣을 필요가 없지! 이런 구조가 싫다면 위에 변수 빼버리고 넣으면 끝
 }
 
 long substract(){
  return a-b;
 }
 
 long multiply(){
  return a*b;
 }
 
 long divide(){           //나누기니깐 쫌..소수점이 나올걸 고려해서..double 강츄! >_<
  return a/b;
 }
 
 ////////////////요기까지가 인스턴스 변수를 이용하여 인스턴스 메서드를 작성한거임
 
 static long add(long a, long b){                    // long a 하공 b 는 클래스변수양 따로 선언 안하고 그냥 메서드에 다해버렸네 그려..
  return a+b;
 }
 
 static long substract(long a, long b){
  return a-b;
 }                                                              //기억 났으면 좋겠어...앞전에 변수 앞에 static 붙이면 (new 어쩌구
                                                                    // 저쩌구) 안붙여도 사용할수 있다는거 기억나심?! 이아이들은 
 static long multiply(long a, long b){             // main 가서 그냥 인스턴스고 뭐고 그냥 막 써도됨..밑에서 잘보심!
  return a*b;
 }
 
 static long divide(long a, long b){
  return a/b;
 }
 
 /////////////여기는 클래스변수로 클래스 메서드를 만든부분~~
}

public class MyMathTest2 {

 public static void main(String[] args) {

  System.out.println(MyMath2.add(20L, 30L));   //봤냐?! 순서 기억하지? static변수나 static메서드나 똑같거든 둘다 불러오는 형식.....클래스명.메서드명(값들)
  System.out.println(MyMath2.substract(20L, 30L));
  System.out.println(MyMath2.multiply(20L, 30L));
  System.out.println(MyMath2.divide(20L, 30L));   //여기까지는 위에 static메서드를 인스턴스 따위도 하지 않고 마음대로 쓸수 있다는것을 보여준거임
  

  ///이제 맨위에서 했던 인스턴스변수와 인스턴스메서드를 쓸차례임...첫번째로 해야할것...기억나지?
  
  MyMath2 mm = new MyMath2();
  
  //인스턴스 메서드는 객체를 생성해야지만 호출이 가능함
  mm.a = 20L;
  mm.b = 30L;
  
  System.out.println(mm.add());
  System.out.println(mm.substract());
  System.out.println(mm.multiply());
  System.out.println(mm.divide());
  
  //System.out.println(mm.add(20L,30L));        이렇게 써도 실행은 됨..긍데 왜 이렇게 쓰면 안될까??
                                                                //인스턴스메서드는 a,b만으로도 충분히 작업이 가능하기 때문에 따로따로
                                                               //매개변수를 줄 필요가 없고,
                                                               //위에 클래스메서드는 인스턴스 변수 없이 매개변수만으로 작업을 수행하기
                                                               //때문에.. 말이 어렵다..?? 코드를 다시 봐봐
 }

}

 

Posted by 옆모습오빠
:

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

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

 

//재귀호출 (메서드가 나와서..리~~)

package JavaTest;

public class FactorialTest {

 public static void main(String[] args) {

  System.out.println(factorial(4));     //FactorialTest.factorial(4)  <--원래는 클래스 명을 앞에 써야한다는거 앞에서 했음~
 }

 private static long factorial(int n) {    //요놈은 위에서 선언해준 factorial()에 관한 메서드 click
                                                    // static 으로 선언해서 인스턴스 (new 어쩌구저쩌구) 안해도 그냥 쓸수있엉
  long result = 0;
  
 if(n==1){                                        // 조건은 factorial 원리를 간단하게 적은거고
  result = 1;
 }else{
  result = n*factorial(n-1);               //이건 앞으로 쓸수 있는 공식임 외워 주입식이야
 }
 return result;                                   //리턴 왜 썼냐고? result 어쩔거야? 그리고 메서드 앞에 void 있어?없어?
 }                                                    //당연히 써야 하는거고 리턴 factorial(4)로 보내서 출력하는거임 OK?!

}

 

Posted by 옆모습오빠
: