动态绑定可以显示受保护的方法

时间:2015-12-01 07:04:47

标签: java oop

父类

package PPRO.Custom.Integration;
public class eInvoice_BSSFormat {
protected void run(String[] param){
}
}

其他班级

package PPRO.Custom.Integration;
public class eInvoice_Archon extends eInvoice_BSSFormat{
}

另一个班级

package com.birchstreet.smwc.scheduler.jobs;
public class eInvoice_Archon extends PPRO.Custom.Integration.eInvoice_Archon implements Job {
  @Override
  public void execute(JobExecutionContext arg0) throws JobExecutionException {
      PPRO.Custom.Integration.eInvoice_Archon arc = new eInvoice_Archon();
      arc.run(args);
    }
eclipse显示问题是

  

eInvoice_BSSFormat类型的run(String [])方法不是   可见

我们无法更改现有文件仅在新文件中工作,我们无法使用此类对象使用

当我们使用这个问题解决了

eInvoice_Archon arc = new eInvoice_Archon();

但我们不能像这样只使用父引用变量 如何解决这个问题

2 个答案:

答案 0 :(得分:0)

来自JLS 6.6.2. Details on protected Access

  

对象的受保护成员或构造函数可以从包外部访问,只能通过负责实现该对象的代码来声明它。

您的protected void run(String[] param)方法受到保护,因此您只能在同一个包中或从实现您eInvoice_BSSFormat的任何类中访问它。

使用以下内容:

package com.birchstreet.smwc.scheduler.jobs;
public class eInvoice_Archon extends PPRO.Custom.Integration.eInvoice_Archon implements Job {
  @Override
  public void execute(JobExecutionContext arg0) throws JobExecutionException {
      //PPRO.Custom.Integration.eInvoice_Archon arc = new eInvoice_Archon();
      this.run(args);
    }
}

答案 1 :(得分:0)

run()方法为protected,因此您只能在不同包中的子类中使用它

  package A;
  class Parent{
     protected int x = 45;
  }

  package B;
  import A.*;
  class Child extends Parent{
    public void access(){
       x= 100; // works
   }
    public void method(){
      Parent p  =new Parent();
       p.x = 150; // error 
    }
 }