interfaceね。その名の通りインタフェイスのみを宣言したもの。
C++でいえば純粋仮想関数(pure-virtual-function)のみで構成されたクラス(みたいなの)。
たとえば:
interface I商品 {
int 売値();
}
JavaにしろC#/VBにしろ、interfaceに記述するメソッド(あるいはプロパティ)は
すべてpublic扱いとなります。
interfaceなんだからそれに対して"何ができるか"は
公開すんのがアタリマエだろ常考ってリクツでしょう。
けどね、隠したいメソッド/プロパティもあるんじゃないかしら。
たとえば、商品の原価は売り手にとっては重要だけど
買い手や競合他社には見せたくないよね。
だから願わくはinterfaceに書くメソッド/プロパティには公開限定子を指定できて
ほしいのね。 ↓こんな具合に。
interface I商品 {
public int 売値();
private int 原価();
}
隠しておきたいけど必要なメソッド/プロパティをどうやって表現するんだろう。
# C++ならprivateなpure-virtual-functionが許されるのにのに
この疑問はその昔JavaでObservable/Observer使ったときに感じたものです。
Observer.update はObservable側で発した変更通知を受けたときに(のみ)反応すべきもの。
だからこいつは勝手に呼んでもらっちゃ困ります。隠しておきたいはずです。
なのにpublicにならざるを得ないのです。