如何解决受保护的可见性规则?

时间:2019-04-21 20:28:12

标签: java polymorphism protected

我在不同的程序包中有两个类,一个是另一个的子类型。我在为特定方法使用最佳访问修饰符时遇到麻烦。我的问题的一般结构如下所示。

 package p1;
 public class Type1 {
      protected void m() {

      }
 }


 package p2;
 public class Type2 extends Type1 {
      private List<Type1> component;

      protected void m() {
            for(Type1 type1Instance : component) 
                  type1Instance.m(); //m() in Type1 is not visable
      }
 }

问题在于方法m()在此设置中不可见,因为代码Type1的实现中未涉及。 Java文档here中用示例here对此进行了说明(请参见示例中的方法delta)。

我看到了两种解决方案:我都不喜欢这两种解决方案。我可以将m()中的Type1设为公开,但我不希望此方法成为API的一部分。我也可以将这两个类都移到同一个包中并使用默认的访问修饰符,但这将涉及到将实际项目中的许多类移到同一个包中,这意味着我失去了一些组织。

有没有更好的方法来解决这个问题?

0 个答案:

没有答案