//클래스 정의 대상 public와 default선언이 갖는 의미
public class AAA{
....
}
class ZZZ {
....
}
public : 어디서든 인스턴스 생성이 가능하다.
-> 소스 파일명을 AAA.java로 설정해야한다. (외부 노출도를 높이기 위함)
-> 따라서 2가지의 public 클래스를 설정할 수 없다.
default : 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성을 허용한다.
-> 파일명을 무엇으로 하든 상관없음
현재 cat.java와 Dog.java의 package가 다르다.
Dog.java에서는 public 클래스인 cat은 불러 올 수 있다.
그러나 Duck는 같은 패키지 내에서만 불러 올 수 있기에 Dog.java에서는 불러 올 수 없다.
위의 선언을 원한다면 Dog.java의 package를 zoo로 바꾸면 해결된다.
protected 이해를 위한 설명
그러나 상속 관계에서 패키지가 다를 경우에는 접근이 불가능하다.
(AAA는 alpha 패키지, ZZZ는 default 패키지)
이 때 상속 관계에서 패키지가 달라도 접근이 가능하게 해주는 키워드가 protected 이다.
-> 위의 protected 선언이 없다고 가정하면 밑에서 오류가 발생!
출처 : 윤성우의 열혈Java 프로그래밍