次の問題に遭遇した匿名クラスを作成しようとしています。次のコードでは、表示メソッドのアクセス修飾子をデフォルトに変更するとエラーが発生しますが、パブリックに変更すると正常に機能します。これが発生する理由を説明してください。すべてのクラスが同じパッケージに含まれている限り、AFAIKpublicとdefaultは同じように機能します。私が間違っている場合は私を訂正してください。
//ファイルから:Skg.java
package sandeep2;
class Skg1
{
public void display()
{
System.out.println("sandeep here");
}
}
class Skg2 {
public void say()
{
System.out.println("Skg2");
}
Skg1 obj = new Skg1()
{
**public void display()** //wont work if this is not public ????????????
{
System.out.println("I am ANONymous");
}
};
}
public class Skg {
public static void main(String[] args)
{
Skg2 x = new Skg2();
x.obj.display();
}
}
クラスSkg2
は、クラスのサブクラスとして匿名内部クラスのインスタンスを作成しようとしますSkg1
。その匿名の内部クラスSkg1.display()
は、パブリックであるをオーバーライドします。メソッドをオーバーライドして、その可視性を減らすことはできません。Javaはそれを許可していません、そしてあなたがそれをすることができればそれは置換原則に違反するでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加