I am new to generics and have encountered the following problem when I was trying to use them in a small programm of which I will try to give the necessary information. 

I will try to give only the necessary but if anything is missing, just let me know and I will provide what is needed.

The first thing is the following interface:

```
1: public interface IPrice<T extends IPrice<T>> {
2:     void setPriceToZero();
3:     T addPrice(T price);
4:     T subtractPrice(T price);
5:     T multiplyPriceByFactor(int factor);
6:     String priceToString();
7: }

```

It is implemented by a class BnSPrice; here the probably necessary part of it:

```
1: public class BnSPrice implements IPrice<BnSPrice> {
2:     public BnSPrice subtractPrice(BnSPrice price) {...}
2: }

```

Now the part which won't compile and which i don't really understand:

```
1: public static void main(String[] args){
2:     [...]
3:     IPrice<? extends BnSPrice> test = new BnSPrice(5);
4:     test.subtractPrice(new BnSPrice(5));
5:     [...]
6: }

```

What i get is 

> 
> "Error:(27, 28) java: incompatible types: main.bnsCalculatorModel.BnSPrice >cannot be converted to capture#1 of ? extends >main.bnsCalculatorModel.BnSPrice"
> 
> 
> 

in the line where i call the subtract-method. 

Why does this happen and how can I correct this so that I can still program to the interface?

(My goal is that it should be easy to extend my program with other "kinds of prices" in the future.)