본문 바로가기

Java 기본 개념

자바를 잡아라 제 11장 - 헷갈릴 땐 그냥 외우자

728x90

 

 

this 
: 이것 저것 요것 그것

 

 

     자기 자신 객체를 지정할 때 사용하는 키워드이다

     this. 을 사용하면 동일 클래스 내의 멤버 멤버변수, 메서드 를 참조 할 수 있다
     this( ) 를 사용하면 생성자 내부에서 자신의 다른 생성자를 호출할 수 있다

 

 

 

 

 

               ① this. 를 사용하여 Person클래스 내부에 선언된 멤버변수를 참조 ( 매개변수 구분 가능하게 함 )

               ② this( )를 사용하여  name은 매개변수로 받고 1은 기존의 Person 생성자를 참조하여 age라고 판단 가능

               ③ this( )를 사용하여 Person 생성자를 참고하게 되어 "이유없음"은 name으로, 1은 age로 판단 가능

 

 

 

 

다음 예제를 통해 확인해보자  ▼

 

 

 

부모 클래스인 Person 클래스

 

 

[ Person 클래스 - 부모 클래스 ]

 

 

                                      ① 멤버변수인 String 타입의 name과 int 타입의 age 선언

                                      ② 기본 생성자를 생성하여 내부에서 this( )를 사용해 멤버변수인 name과 age 초기화

                                      ③ String 타입의 name을 매개변수를 받는 생성자를 생성하고

                                           this( )를 사용해 멤버변수 age를 참조

                                      ④ String 타입과 int 타입의 매개변수를 받는 생성자를 생성하고 this.을 사용해 멤버변수를 참조

                                            ( name은 toUpperCase()로 인해 대문자로 바뀜 )

                                      ⑤ 반환값이 String 타입인 info( )메서드 생성

 

 

 

부모 클래스를 상속 받은 Teacher 클래스와 Employee 클래스와 Student 클래스

 

 

[ Teacher, Employee, Student 클래스 - 자식 클래스 ]

 

 

        ① 부모 클래스의 상속을 받고 있기 때문에 부모 클래스의 멤버변수에 this.를 사용해 접근

         ② 각 클래스들의 고유한 멤버변수를 선언해 부모클래스의 메서드인 info( )를 오버라이딩

 

 

main 클래스

 

 

[ main 클래스 ]

 

 

                                   ① 부모 클래스인 Person에 대한 생성자를 생성한 다음 메서드 info( )를 호출 후 실행

 

                                   ② Person에 대한 매개변수가 문자열인 생성자인 경우

                                        name은 "hongglidong"으로 입력 받아 멤버변수에 저장하고

                                        age는 원래 생성자의 멤버변수를 참조하여 1

 

                                   ③ Person에 대해 매개변수를 문자열과 정수 모두 받는 생성자인 경우

                                        원래 생성자의 멤버변수인 name과 age에 각각 저장(초기화)

 

                                   ④ 자식 클래스인 Teacher 클래스에서 오버라이딩 된 info ( )클래스가 실행될 때

                                        부모 클래스의 멤버변수를 참조

 

 

 

 

 

 

 

super
: 본받고 싶은 존재..

 


     한단계 위 부모클래스 의 객체를 지정할 때 사용하는 키워드이다

      super.을 사용하면 부모클래스의 멤버를 참조할 수 있다
     생성자 내부에서만 사용이 가능하며, 부모클래스의 생성자를 호출하는데 사용한다

     생성자의 첫 라인에는 반드시 this ( ), super ( )가 있어야 하는데 이를 기술하지 않으면

     묵시적으로 super가 삽입되어 부모클래스의 기본 생성자를 자동으로 호출한다

     생성자 내부에서 또다른 생성자를 호출할 때는 this ( ), super ( )을 반드시 생성자 블록 내부의 첫 라인에 기술해야 한다

 

 

 

 

부모 클래스인 Person 클래스

 

 

[ Person 클래스 - 부모 클래스 ]

 

 

                                          ① 멤버변수인 String 타입의 name과 int 타입의 age 선언

                                          ② String 타입의 name을 매개변수를 받는 생성자를 생성하고

                                               this( )를 사용해 멤버변수 age를 참조

                                      

                                          ③ String 타입과 int 타입의 매개변수를 받는 생성자를 생성하고 this.을 사용해 멤버변수를 참조

                                               ( name은 toUpperCase()로 인해 대문자로 바뀜 )

                                          ④ 반환값이 String 타입인 info( )메서드 생성

 

 

부모 클래스를 상속 받은 Mother, Student 클래스

 

 

[ Mother 클래스 - 자식 클래스 ]

 

super( )를 통해 부모 클래스의 변수에 접근

 

 

부모 클래스를 상속 받은 Teacher, Employee 클래스

 

 

[ Teacher, Employee, Student 클래스 - 자식 클래스 ]

 

 

                       ① 부모 클래스의 상속을 받고 있기 때문에 부모 클래스의 멤버변수에 this.를 사용해 접근했던 걸                        

                            super( )를 통해 부모 클래스의 변수 사용 가능

                       ② 각 클래스들의 고유한 멤버변수를 선언해 부모클래스의 메서드인 info( )를 오버라이딩

 

 

main 클래스

 

 

 

[ main 클래스 ]

 

 

             

                  자식 클래스인 Mother 클래스의 생성자를 생성하여 부모 클래스에서 상속 받은 info( ) 메서드 호출 후 실행

 

                 ② 자식 클래스인 Employee 클래스의 생성자를 생성하여 부모 클래스에서 상속 받은 info( ) 메서드 호출 후 실행

                   (이 때 super을 사용해 부모 변수에 접근했기에 앞의 두 매개변수(name, age)는 부모 클래스의 멤버변수이고

                   나머지 매개변수(department)는 자식 클래스의 고유한 멤버변수)

 

                ③ 자식 클래스인 Student 클래스의 생성자를 생성하여 부모 클래스에서 상속 받은 info( ) 메서드 호출 후 실행

                  (이 때 super을 사용해 부모 변수에 접근했기에 앞의 두 매개변수(name, age)는 부모 클래스의 멤버변수이고

                   나머지 매개변수(studentId)는 자식 클래스의 고유한 멤버변수)

 

               ④ 자식 클래스인 Teacher 클래스의 생성자를 생성하여 부모 클래스에서 상속 받은 info( ) 메서드 호출 후 실행

                 (이 때 super을 사용해 부모 변수에 접근했기에 앞의 두 매개변수(name, age)는 부모 클래스의 멤버변수이고

                 나머지 매개변수(subject)는 자식 클래스의 고유한 멤버변수)