如何实现越过包级私有,访问protected中的属性

本文介绍了一种在Java中解决跨包访问protected或默认访问级别方法的问题,通过创建一个公共类Bridge来暴露静态工厂方法,实现在不同包中创建特定类的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何实现越过包级私有,访问protected中的属性

大一新生,刚刚接触,有写的不对的地方,还望各位前辈多批评指正,阿里嘎多:
\quad\quad当我们在类中新建一个静态工厂方法时,

public class Person {
  static Object CreatePerson(){
      return new Person();
   }
}

\quad\quad 如果想在其他方法中调用CreatePerson方法创建Person类,那么按道理是只能在同一个Package中才能调用该方法。例如这样:(Person与Metting类在同一个包中)

public class Metting {
   public static void main(String[] args) {
      Object person = Person.CreatePerson();
 }
}

如果在另一个包中使用该方法时:

public class Metting {
   Object person= Person.CreatePerson();
}

程序会提示CreatePerson()这个方法不是公有的,不能使用。

\quad\quad 那么当我们想越过包级私有,在不同的包中去调用该静态工厂方法去创建一个Person时,需要做些什么东西呢?
\quad\quad 首先,我们需要在Person所在的包中,新建一个名为Bridge的Class(如果是来自com的类,则需要先建立一个与该类相同地址、相同名称的Package,再在该类中建立一个Bridge类),然后在该类中建立静态工厂方法,用以返回一个Person类,代码如下:

public class Bridge {
  public static Object CreatePerson(){
     return new Person();
  }
}

这时候已经暴露了一个public接口,所以自然而然的,可以在其他包中调用CreatePerson()方法,效果如下:
在这里插入图片描述
各个类之间的包级关系如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值