当我从用户定义的包扩展 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方法)。
请问CalculateDrinks的calculatePrice()
方法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()
方法。
我有一个名为 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方法)。
请问CalculateDrinks的calculatePrice()
方法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()
方法。