일반 셋째날 - 패키지, 상속, 접근제어

황제낙엽 2003.04.14 11:47 조회 수 : 509 추천:150

sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  
10. import문과 패키지

- C에서의 include와 비슷한 의미를 갖는다.

- 자신이 원하는 클래스가 자신이 생성한 클래스와 같은 폴더내에 있을 경우에는 import를 하지 않아도 된다

- 동일한 매소드를 갖는 두개의 클래스를 import한후 그 메소드를 사용할경우 에러 또는 원치않는 결과를 낳을수 있다


11. PACKAGE

- 표준 package : java.*** (JDK설치시 자동으로 포함됨)

- 확장 package : javax.*** , com.ibm.*** , org.CORBA.*** 등등 (제공되는 회사에서 이름을 임의로 만든다)

- 확장 package는 c:jdkjrelib에 import할 것들이 있고... 확장은 ext폴더에 넣고 사용한다

- swing 패키지는 순수 자바코드로 작성되어 있기 때문에 운영체제의 영향을 받지 않는다  


12. 형변환

- 같은 데이터 타입사이에만 가능하다 (ex) 기본과 기본, reference와 reference

- 타입이 다를경우에는 메소드를 이용해야만 한다.

- 자동형변환 : 小 -> 大 (ex) int -> double

- 강제형변환 : 大 -> 小 (ex) double -> int, int a=(int)3.14;


13. PACKAGE 생성 (package test폴더 참조)

- package의 선언은 import보다 먼저되며 한번만 가능

- 콘솔창에서 javac -d . *.java라는 명령은 package가 정의된 화일에서 package이하 경로에 컴파일된 화일을 생성하게 된다.


14. 상속(inheritance)=>확장의 의미

- 모든 클래스는 java.lang.Object class를 상속 받는다. (object는 모든 클래스의 최상위 클래스이다)

  형식) class A extends B ...
  
   1) 확장: Super(상위)class의 field와 method를 상속한다.

   2) 상속시 생성자는 상속불가

   3) 다중상속은 불가 (해결책: interface 또는 밑에와 같이)
      
      class C extends B,A (X) --> class A extends B 한 후에 class C extends A (O)

         (A)     (B)                               (B)
            .     .                         extends .
extends  .   . extends        -->              . . .(A). . .
              . .                                                     . extends
               .                                                      .
              (C)                                                  (C)

      
   4) final로 선언된 class는 상속 받을 수 없다.
  
   5) abstract 수정자의 사용은 반드시 overriding되어야 함을 의미한다.

   6) 하위class를 참조하여 상위class의 객체를 생성할 수 있다.

      ex) Carlendar cal = new GregorianCarlendar

          : 정의 형식이 abstract인 클래스는 스스로 객체를 생성 수 없으므로 그 자식 클래스인

            GregorianCarlendar에서 Carlenar클래스의 객체를 생성하고 있다.

   7) 상속시 부모클래스에 사용자 생성자만 정의하고 디폴트 생성자를 사용자정의하지 않는다면 하위클래스 객체 생성시 에러가 발생.

   8) Interface는 abstract로 선언할 수 있다.

   9) 상속된 클래스의 객체생성시 부모클래스의 레퍼런스변수를 통한 자식클래스의 객체생성은 가능하다. 이것은 비록 Reference는 부모클래스이지만 필요에 따라 자식클래스로의 casting이 가능함을 말한다. 하지만 자식클래스의 레퍼런스변수를 통한 부모클래스의 객체생성이나 부모클래스의 레퍼런스변수에 자식클래스로 casting한 부모클래스객체 생성은 컴파일오류는 일어나지 않으나 Runtime시 error가 발생한다.

  10) 부모클래스 레퍼런스변수를 통한 자식 클래스 객체 생성시 멤버함수는 자식쪽에 접근하지만, 변수는 부모쪽에 접근한다.


15. 접근제어

1) 변수 : 접근제어자 + 자료형 + 변수명;

2) METHOD : 접근제어자 + 수정자 + RETURN TYPE + METHOD NAME() {}

3) CLASS : 접근제어자 + 수정자 + class + CLASS NAME {}

   * CLASS의 수정자에 대해서 : CLASS의 수정자는 abstract, final, static을 가질수 있다.
                               단 static은 내부 CLASS에서만 허용된다. (수정자 내용은 중요하므로 필히 체크하세요.)

4) 접근제어자 : PUBLIC, PROTECTED, PRIVATE, DEFAULT(접근제어자를 생략했을 경우)

   * PROTECTED는 부모와 자식들이 다른 폴더(다른 패키지)에 존재하더라도 1차 자식클래스에게도 상속가능하다. (DEFAULT는 자식이라도 패키지가 다르면 상속불가, 같은 패키지라면 PUBLIC의 특성을 갖는다.)

   * 상위 클래스의 PRIVATE INT A=10;을 하위 클래스에서 A값 바꾸기

     : PRIVATE은 어떤 클래스에서도 PRIVATE이 걸린 변수를 접근할수는 없으나, SUPER키워드를 사용하면 PRIVATE 변수의 값을 바꿀수 있다.

       EX) SUPER.A=100;
       

접근 제한자

같은 클래스

같은 패키지

상속받은 클래스

관계없는 클래스

public

protected

×

friendly(default)

×

×

package

×

×

private

×

×

×


5) main메소드 선언시 public static void main로 해야만 한다. 만일 public static int main으로 선언한후 리턴값을 정의한다면(예- return 1;) exception이 발생하고, return;으로 되어있거나 또는 return구문이 없다면 compile error가 발생한다.


16. METHOD OVERRIDING 과 OVERLOADING

   1) Overload는 인자값의 type과 갯수와 배치가 달라야 한다. (수정자와 Return type에는 관계가 없다)
   2) Override는 모든 것(Return type,접근제어자,수정자,인수)이 똑같아야 한다.
   3) 하위 클래스에서 재정의한 OVERRIDE METHOD는 기본적으로 부모 클래스보다 우선적으로 호출되지만, SUPER키워드를 사용하면 현재 클래스의 OVERRIDE METHOD를 무시하고 부모 클래스의 METHOD를 사용할 수 있다.


17. THIS와 SUPER

- THIS ==> 자기 CLASS 참조변수  , SUPER ==> 상위 CLASS 참조변수

 - 비슷하게도 THIS() ==> 자기 CLASS의 생성자 호출, SUPER() ==> 상위 CLASS의 생성자 호출

- 메소드에 객체 자신의 레퍼런스값을 넘겨줄때.


오늘의 예제 :: [3]