DiscountStrategy.java
abstract public class DiscountStrategy {
  private double price = 0;
  private int copies = 0;  public DiscountStrategy(double price, int copies) {
  }  public abstract double calculateDiscount();
}NoDiscountStrategy.java
public class NoDiscountStrategy
    extends DiscountStrategy {
  private double price = 0;
  private int copies = 0;  public NoDiscountStrategy(double price, int copies) {
    this.price = price;
    this.copies = copies;
  }  public double calculateDiscount() {
    return price * copies;
  }
}为什么要报错?
"NoDiscountStrategy.java": cannot resolve symbol: constructor DiscountStrategy ()in class test.strategy.DiscountStrategy at line 8, column 55
"NoDiscountStrategy.java": Object() in java.lang.Object is not defined in a public class or interface; cannot be accessed from outside package at line 8, column 55这个是为什么呀?

解决方案 »

  1.   

    abstract public class DiscountStrategy 中添加一个构造器:public DiscountStrategy() {  }
      

  2.   

    类DiscountStrategy没有无参数的构造函数,当你重写了一个带参数的构造函数后,一定要有无参数的构造函数,但是如果没有带参数的构造函数,可以不写无参数的构造函数,系统会默认构造函数.-----------------
    http://blog.csdn.net/f_acme
      

  3.   

    to:  yqj2065(严千钧)  and  f_acme(沧海一声笑) 一个抽象类是不能生成对象的,那么添加 public DiscountStrategy() {} 有什么用呢?
      

  4.   

    明明是不认识那个类嘛... cannot resolve symbol...
      

  5.   

    class A {
    }class B extends A {
      public B() {
        // 这里隐含调用super()
        // 所以如果A类没有无参数构造函数就会报错
      }
    }楼主问题同此
      

  6.   

    public NoDiscountStrategy(double price, int copies) {
        super(price,copies);//显示调用
        this.price = price;
        this.copies = copies;
      }
      

  7.   

    abstract class A{
    private int i = 0;
    private double d = 0.0;
    public A(int iVal,double dVal){
    }
    abstract public void discount(int iData,double dData);
    }
    public class ExClass extends A{
    private int i = 0;
    private double d =0.0;
    public ExClass(int ii,double dd){
    super(ii,dd);
    i = ii;
    d = dd;
    }
    public void discount(int iData,double dData){
    i = iData;
    d = dData;
    }
    public double getValue(){
    return i*d;
    }
    }