나는 relation
패키지의 database.relation
하위 클래스, Join
패키지의 database.operations
이라는 추상 클래스를 가지고 있습니다. relation
에는 mStructure
이라는 보호 된 구성원이 있습니다.다른 패키지에있을 때 내 서브 클래스가 수퍼 클래스의 보호 된 변수에 액세스 할 수없는 이유는 무엇입니까?
Join
에서 :
:The field Relation.mStructure is not visible
public Join(final Relation relLeft, final Relation relRight) {
super();
mRelLeft = relLeft;
mRelRight = relRight;
mStructure = new LinkedList<Header>();
this.copyStructure(mRelLeft.mStructure);
for (final Header header :mRelRight.mStructure) {
if (!mStructure.contains(header)) {
mStructure.add(header);
}
}
}
라인
this.copyStructure(mRelLeft.mStructure);
나는 다음과 같은 오류가
for (final Header header : mRelRight.mStructure) {
에
두 클래스를 같은 패키지에 넣으면 완벽하게 작동합니다. 누구든지이 문제를 설명 할 수 있습니까?
적절한 해결책은 보호 된 접근자를 정의하는 것입니까? –
같은 일이 일어날 것입니다. 더 흥미로운 것은 'Join'이 IS-A '관계'인지, 그리고 그렇다면 왜 다른 패키지에 들어가야 하는지를 아는 것입니다. 아마도 중간 객체를 사용하여 구조를 추상화하고 할 것입니다. 코딩 마비를 피하기 위해 지금은 같은 패키지로 옮길 것을 제안합니다. – OscarRyz
하위 클래스의 * 인스턴스 나 하위 클래스 *를 상속 한 인스턴스의 모든 인스턴스에서 해당 멤버에 액세스 할 수 있다고 자식 클래스에서 말할 경우 첫 문장을 좀 더 정확하다고 믿습니다. 자식 클래스가 상속하는 클래스의 모든 인스턴스 (사양의 6.6.2.1 절 참조 : http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.2). 따라서 더 파생되지 않은 구성원 만이 아니라 상속 트리의 추가 파생 멤버에서이를 볼 수 있습니다. –