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

标签 java private public

我正在尝试创建一个匿名类,在此过程中我遇到了以下问题。在下面的代码中,当我将显示方法访问修饰符更改为默认值时,它会给出错误,但是当我将其更改为公共(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/

相关文章:

java - 公共(public)静态变量和私有(private)静态变量之间的区别

git - 阻止推送 git 分支

javascript - 从javascript类中的 "Public"方法访问 "Private"方法

java - 从InputStream获取URL

java - 使用 HttpURLConnection 在 Android 中更新 mySql 表

c++私有(private)静态成员变量与自由非成员变量相比

java - 如何在一个crt文件中导出多个公共(public)证书

java - 为什么重写的方法应该在这个程序中公开?

java - Jetty,isSecure() 在 HTTPS 连接上返回 false

java - 无法在Excel中插入数字格式的数据