나는 Test Driven Development: By Example을 통해 읽고 있는데, 예제 중 하나가 나를 괴롭 히고 있습니다. 다음 장에서, 그런테스트 구동 개발 예제 예제 작성자 : Kent Beck
public boolean equals(Object object)
{
Dollar dollar= (Dollar) object;
return amount == dollar.amount;
}
: 제 3 (전체 평등)에서, 저자는 Dollar
클래스에 equals
함수 두 Dollar
오브젝트를 비교 생성 (4 개인), 그 양을 전용 부재를 만든다 달러 수업.
private int amount;
및 테스트가 통과했습니다. 이로 인해 다른 Dollar
객체의 amount
멤버에 액세스하는 것이 제한되어 있으므로 객체가 자신의 amount
멤버에 액세스 할 수 있기 때문에 equals
메서드에서 컴파일러 오류가 발생하지 않아야합니까?
//shouldn't dollar.amount be no longer accessable?
return amount == dollar.amount
근본적으로 오해 나는 private
입니까?
나는 돌아 가기로 결정하고 수동으로 책과 함께 코드와 UPDATE 나는 다음 부분 (제 6 장 - 모두를위한 평등, 돌아 오는)에 도착했을 때 그들은 부모 클래스로 양을 밀어하고 보호 만든다
public class Money
{
protected int amount;
}
public class Dollar : Money
{
public Dollar(int amount)
{
this.amount = amount;
}
// override object.Equals
public override bool Equals(object obj)
{
Money dollar = (Money)obj;
//"error CS1540: Cannot access protected member 'Money.amount'
// via a qualifier of type 'Money'; the qualifier must be of
// type 'Dollar' (or derived from it)" on the next line:
return amount == dollar.amount;
}
}
이이
protected
는 C#으로 인스턴스를 기반으로한다는 뜻 : 나는 액세스 문제 받고 있어요?
나는이 책을 읽지 않았지만 그가 금액 회원에게 공개적으로 접근 할 수있는 부동산을 만들었을 가능성이 있습니까? – TheTXI
@TheTXI : Java에는 속성이 없습니다. 정확한 변경은 package-private 필드 ('int amount;')로 사용되는 양과 private 필드 ('private int amount;')로 변경되었습니다. (저는 Kent가 공용 대신 책에서 package-private을 사용하는 이유를 모르겠습니다. 자바 언어의 자세한 정보를 줄이고 주요 요점에 초점을 맞추는 것일 수도 있습니다.) –