我正在尝试创建一个匿名类,在此过程中我遇到了以下问题。在下面的代码中,当我将显示方法访问修饰符更改为默认值时,它会给出错误,但是当我将其更改为公共(public)时,它工作正常。你能向我解释一下为什么会发生这种情况吗?只要所有类都在同一个包中,公共(public)和默认的工作方式就类似。如果我错了,请纠正我。
<小时/>//来自文件: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
的子类。该匿名内部类重写了公共(public)的Skg1.display()
。您不能重写方法来降低其可见性。 Java 不允许这么做,如果你能这么做,那就违反了替换原则。
关于java - 如果方法未标记为公共(public)(所有类都在同一个文件中),程序将给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33187299/