글
* JAVA 의 접근 제어자 (Access Modifier)
- public :
모든 클래스들이 접근 가능.
- protected :
같은 패키지 내에 있거나 또는 상속받은 경우에만 접근 가능.
- package-private :
아무런 접근 제어자를 명시해주지 않는 경우에 해당.
같은 패키지 내에 있을 때만 접근 가능. (참고로 나는 default 제어자로 알고 있었다)
- private :
해당 클래스 내에서만 접근 가능.
* 클래스 접근 제어자 선언할 때 유의할 점
- 자바에서는 1개의 .java 파일 안에 여러 개의 클래스를 선언할 수 있다.
PublicClass.java
package test; class PublicClass { public static void main(String[] args){ } } class PublicSecondClass { }
위의 코드 처럼 작성이 가능하고 컴파일도 정상적으로 된다.
package test; public class PublicClass { public static void main(String[] args){ } } class PublicSecondClass { }
위 코드도 마찬가지이다.
하지만 아래의 경우 에러가 발생한다.
package test; class PublicClass { public static void main(String[] args){ } } public class PublicSecondClass { // error }
결국 3가지 코드를 통해 말하고자 하는 바는,
public 으로 선언된 클래스가 파일 내에 있다면
그 소스코드 파일의 이름은 public 인 클래스의 이름과 동일해야만 한다는 점이다.
* 오버라이딩 (Overriding) : 상속과 관련.
- 부모 클래스의 메소드를 자식인 자신의 클래스 내에서 재정의한다.
- 접근 제어자, 리턴 타입, 메소드 이름, 매개 변수 타입 및 갯수가 모두 동일.
- 단! 접근 제어자는 부모 클래스의 메소드와 반드시 동일할 필요는 없으나 접근 권한이 확장되는 경우만 가능하다.
(접근 권한 : public > protected > package-private > private)
예를 들어 부모 클래스의 메소드 접근 제어자가 public 일 때,
자식 클래스의 메소드 접근 제어자가 private 인 경우는 접근 권한이 축소된 경우라서 컴파일 에러.
* 오버로딩 (Overloading) : 한 클래스 내에서.
- 메소드 이름은 동일하되 매개 변수만 다르게 하는 것.
- 반환 타입은 상관 없다. 중요한 건 같은 메소드 이름, 매개 변수가 들어가는 '()' 안의 내용이다.
public int add(int x, int y) { } public double add(double x, double y) { } public void print(int intData, long longData, String strData) { } public void print(int intData, String strData) { } public void print(String strData, int intData) { }
위 코드 라인 4, 5와 같이 타입의 순서가 달라도 다른 메소드 처럼 인식된다는 점.
'Programming > Java' 카테고리의 다른 글
자바의神 Vol.1 : Garbage Collector 은 어떻게 진행될까? (0) | 2014.05.26 |
---|---|
자바의神 Vol.1 : 비트 시프트 연산자 (0) | 2014.05.26 |
자바의神 Vol.1 : Annotation (0) | 2014.05.24 |
자바의神 Vol.1 : Nested Class (0) | 2014.05.22 |
RECENT COMMENT