You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java的不同Package中访问子类?

嘿,我来帮你梳理清楚怎么在不同包下访问另一个包中类的内部子类~

首先得明确两个关键前提,不然跨包访问根本无从谈起:

  • 包含内部子类的外部类(也就是你说的Package1里的Mainclass)必须是public修饰的,不然跨包连外部类都找不到;
  • 内部子类(SubClass)不能是private修饰,至少得是protected或者public,这样跨包才有访问权限。

接下来分两种常见的内部类情况来具体说明:

1. 当SubClass是成员内部类(非静态)

成员内部类是依赖外部类实例存在的,所以得先创建外部类的对象,再通过它来实例化内部类:

先看Package1的代码示例:

package package1;

// 外部类必须是public
public class Mainclass {
    // 内部子类用public/protected修饰,允许跨包访问
    public class SubClass {
        public void testMethod() {
            System.out.println("我是Package1里的SubClass方法");
        }
    }
}

然后是Package2的访问代码:

package package2;

// 导入Package1的外部类
import package1.Mainclass;

public class TestAccess {
    public static void main(String[] args) {
        // 第一步:创建外部类实例
        Mainclass mainObj = new Mainclass();
        // 第二步:通过外部类实例创建内部子类实例
        Mainclass.SubClass subObj = mainObj.new SubClass();
        // 调用内部子类的方法
        subObj.testMethod();
    }
}

2. 当SubClass是静态内部类

静态内部类不依赖外部类实例,直接通过外部类的类名就能访问,步骤更简单:

Package1的代码示例:

package package1;

public class Mainclass {
    // 静态内部子类,同样用public/protected修饰
    public static class SubClass {
        public void testMethod() {
            System.out.println("我是Package1里的静态SubClass方法");
        }
    }
}

Package2的访问代码:

package package2;

// 可以直接导入外部类,或者直接导入内部子类
import package1.Mainclass;
// 也可以写成:import package1.Mainclass.SubClass;

public class TestAccess {
    public static void main(String[] args) {
        // 直接通过外部类名创建静态内部类实例
        Mainclass.SubClass subObj = new Mainclass.SubClass();
        // 如果直接导入了内部子类,就可以简化成:SubClass subObj = new SubClass();
        subObj.testMethod();
    }
}

额外注意点

  • 如果SubClass是protected修饰的,那Package2的类必须继承Package1的Mainclass,才能访问这个内部子类;
  • 要是内部子类是默认访问权限(没有写修饰符),那只有同包才能访问,跨包是不行的哦。

内容的提问来源于stack exchange,提问作者M. Fitriawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:14