是否在运行时强制执行包访问?

时间:2017-05-15 15:12:34

标签: java jvm package javac

我正面临一个需要在非常旧的系统上运行的遗留应用程序(Java 1.4)。我需要覆盖一个返回GridBagLayoutInfo对象的受保护方法(GridBagLayout.GetLayoutInfo)。问题是GridBagLayoutInfo类本身是封装私有的,直到Java 1.6(然后它被公开)。

所以让我们来看看这段代码:

import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridBagLayoutInfo;

public class GridBagLayoutSubclass extends GridBagLayout
{
    protected GridBagLayoutInfo GetLayoutInfo(Container parent, int sizeflag)
    {
        System.out.println("Foo");
        return super.GetLayoutInfo(parent, PREFERREDSIZE);
    }

    public static void main(String args[]) throws Exception
    {
        (new GridBagLayoutSubclass()).GetLayoutInfo(new Container(), 1);
    }
}

我可以在"现代" Java系统。令我惊讶的是,生成的类文件在目标Java系统(Java 1.4)上工作,即使GridBagLayoutInfo类在该运行时环境中是包私有的。为什么会这样? JVM是否在运行时检查类型的可见性?

0 个答案:

没有答案