私はTest Driven Development: By Exampleを通して読んでおり、その1つの例は私を悩ませています。次の章では、次に例によるテスト駆動開発例Kent Beck著
public boolean equals(Object object)
{
Dollar dollar= (Dollar) object;
return amount == dollar.amount;
}
:第3章(すべてのための平等)で、著者はDollar
クラスのequals
関数は、2つのDollar
オブジェクトを比較するために作成されます(4:個人情報保護)、彼は額にプライベートメンバーになりますドルクラスの
private int amount;
となります。オブジェクトが他のDollar
オブジェクトのamount
メンバにアクセスすることを制限されているため、オブジェクトが自身のamount
メンバにアクセスできる間、これはequals
メソッドでコンパイラエラーを引き起こしませんか?
//shouldn't dollar.amount be no longer accessable?
return amount == dollar.amount
私は根本的に誤解しているprivate
ですか?
UPDATE 私は手動での本と一緒に戻って、コード行くことにしたと、私は次の部分(第6章 - すべて、Reduxの平等)に着いたとき、彼らは親クラスに額を押して、それが保護します、私はアクセスの問題を取得しています:
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にはプロパティがありません。正確な変更は、パッケージプライベートフィールド( 'int amount;')であったもので、プライベートフィールド( 'private int amount;')に変更されました。 (私はなぜKentがpublicではなくpackage-privateを使うのか分かりません.Java言語の冗長さを減らし、主なポイントに焦点を当てるだけかもしれません) –