如果方法未标记为public(所有类都在同一文件中),程序将给出错误

时间:2015-10-17 13:41:23

标签: java private public

我正在尝试创建一个匿名类,在此期间我遇到了以下问题。在下面的代码中,当我将显示方法访问修饰符更改为默认值时,它会给出错误,但是当我将其更改为public时,它可以正常工作。你能解释一下为什么会发生这种情况.AFAIK公共和默认工作类似,只要所有类都在同一个包中。如果我错了,请纠正我。

//来自档案: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();
    }
}

1 个答案:

答案 0 :(得分:2)

Skg2尝试创建匿名内部类的实例作为类Skg1的子类。匿名内部类重写Skg1.display(),这是公开的。您无法覆盖方法以降低其可见性。 Java不允许这样做,如果可以的话,它会违反替换原则。