2015-12-01 2 views
0

родительский классДинамическое связывание может показывать защищенные методы?

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); 
    } 

затмение показать проблема

Способ запуска (String []) из тип eInvoice_BSSF Ormat не видно

мы не можем изменяет существующий файл работает только в новом файле, и мы не можем использовать этот класс объекта использовать

, когда мы используем как эту проблему решить

eInvoice_Archon arc = new eInvoice_Archon(); 

но мы не можем использовать эту переменную только родительскую переменную как решить эту проблему

+0

Почему вы не можете делать то, что вы предлагаете? Это единственное действующее решение. – cadrian

+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); 
    } 
} 
+0

в этом коде PPRO.Custom.Integration.eInvoice_Archon класс extends eInvoice_BSSFormatclass и мой класс com.birchstreet.smwc.scheduler.jobs.eInvoice_Archon расширяет PPRO.Custom.Integration .eInvoice_Archon. поэтому мой класс также расширяет родительский класс родителя –

+0

Да, см. код выше, я прокомментировал неправильный код, вы должны использовать this.run (args). Вы не можете вызвать run() из объекта 'new eInvoice_Archon()'. «Доступ к реализованному классу означает вызов метода суперкласса, а не создание объекта. –

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 
    } 
} 
+0

мой класс также является подклассом класса метода запуска –

+0

' PPRO.Custom.Integration.eInvoice_Archon arc = new eInvoice_Archon(); arc.run (args); ' , вы не можете использовать 'arc' для доступа к' run() ', использовать' this.run (args) '. Защищенные члены могут быть доступны только через наследование из подкласса вне пакета. – Ramanlfc

Смежные вопросы