当我从用户定义的包扩展 class 时,编译器会做什么?

What does the compiler do when I extend class from user defined package?

我有一个名为 Drinks 的用户定义包,
其中有一些 classes

Drinks
    Water
        Cocoa (extends Water)
        Coffee (extends Water)
    CalculateDrinks

编译包后,我在默认包中创建了一个名为 Cappuccino extending Coffee 的 class,它有这些classes.

Default
    Cappuccino
    TestPackage


CalculateDrinks 中,它有一个名为 calculatePrice() 的方法,它计算每 getPrice() 种饮料的总和,包括 Cappuccino class(它还有getPrice方法)。

请问CalculateDrinkscalculatePrice()方法class是如何知道getPrice()的方法的卡布奇诺class?
任何帮助,将不胜感激。如果您想查看源代码,请告诉我。

编辑: 添加了一些重要的代码部分

TestPackage.java

public class TestPackage{
    public void static main(String[] args){
        Coffee coffee = new Coffee(150);    //that is the price
        Cappuccino cap = new Cappuccino("snowman");

        Drinks drinks = {coffee, cap};
        CalculateDrinks cal = new CalculateDrinks(drinks);
        System.out.println("The total price of all drinks is " + cal.getTotalPrice()); //it should return 350
    }
}

CalculateDrinks.java

public class CalculateDrinks{
    private int totalPrice;
    private Drinks drinks[];

    CalculateDrinks(Drinks drinks[]){
        this.drinks = drinks;
        calculatePrice();
    }

    public void calculatePrice(){
        for (Drinks drink in drinks){
            totalPrice += drink.getPrice();
        }
    }  

    public int getTotalPrice(){
        return totalPrice;
    }  
}

Cappuccino.java

public class Cappuccino extends Coffee{
    private String pattern;
    Cappuccino(String pattern){
        this.pattern = pattern;
    }
    public int getPrice(){
        return super.getPrice() + 50;
    }
}

因为在 calculatePrice() 中,它分别为每个饮料对象调用 getPrice() 方法。

public void calculatePrice(){
    for (Drinks drink in drinks){
        totalPrice += drink.getPrice();
    }
} 

上面for循环的第一步;它调用 coffe.getPrice() 因为 drinks 数组中的第一个饮料是咖啡对象。
第二步;它调用 getPrice() 的 Cappuccino 对象 cap.getPrice()
你应该知道 getPrice() 方法被每个子 class 覆盖并且每个对象都调用它自己的 getPrice() 方法。