【问题标题】:Cannot access Parent LinkedList java无法访问父链表 java
【发布时间】:2017-03-20 11:17:30
【问题描述】:

我有父类 CompositeDiscount。它有一个链表来存储一些折扣。 它有两个子类 BestForVersityStrategy 和 BestForStudentStrategy。我在另一个类注册中填充父链表。当我尝试从 UI 迭代 LL 时,它会给出折扣列表,但是当我从子级(即 BestForVersity)调用它时,它显示列表为空。

package registrationui;
import java.util.LinkedList;
public class CompositeDiscount implements IDiscountStrategy{
    LinkedList<IDiscountStrategy> disList;
    public CompositeDiscount(){
        disList= new LinkedList<>();
    }

    @Override
    public int getDiscount(Registration reg) {
       return 0;
    }
    public void addDiscount(IDiscountStrategy ids){
        disList.add(ids);
    }
}

这是父类

package registrationui;
public class BestForStudentStrategy extends CompositeDiscount{


     public int getDisocunt(Registration reg){
        int amount=0;
        for(IDiscountStrategy ids:disList){
           if(ids.getDiscount(reg)>amount){
               amount=ids.getDiscount(reg);
           }
        }
        return amount;
    } 
}

这是子类

private void academicActionPerformed(java.awt.event.ActionEvent evt) {                                         

      if(academic.isSelected())
        rcc.addCompositeDiscount(rcc.getDiscountPloicy("registrationui.AcademicExcellenceDiscount"));
        else{
            for(IDiscountStrategy ids:rcc.getCompositeDisocunt().disList)
            {
                if(ids.getClass().toString().equals("class registrationui.AcademicExcellenceDiscount"))
                    rcc.getCompositeDisocunt().disList.remove(ids);
            }
        }
    }     

UI 通过调用 Resitration 类的控制器填充它的 ID

public void addCompositeDiscount(IDiscountStrategy ids){        
       cds.addDiscount(ids);
       bfn=new BestForNsuStrategy();      
       bfs=new BestForStudentStrategy();  
    }

public IDiscountStrategy getDiscountPolicy(String policy){
        try {
            try {
                ids=(IDiscountStrategy)Class.forName(policy).newInstance();
            } catch (InstantiationException ex) {
                Logger.getLogger(Registration.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Registration.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Registration.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ids;
    }

【问题讨论】:

标签: java inherited


【解决方案1】:

您在 CompositeDiscount 中的链接列表是静态的。 Java中的静态变量不被继承,它们只存在于声明它们的类中

【讨论】:

  • 对不起,它不是静态的。像现在 。我已经更新了代码,请立即检查。
【解决方案2】:
public static LinkedList<IDiscountStrategy> disList;

你必须使用 public 修饰符来表示静态

【讨论】:

  • 它不是静态的
  • 你必须使用 public 修饰符才能访问它
猜你喜欢
  • 2020-02-09
  • 2023-03-06
  • 2015-08-06
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多