40.Java繼承案例:各類水果的價(jià)格
水果是超類,而對(duì)應(yīng)的蘋果、橙子等為子類,子類通常繼承超類的特性,然后具有獨(dú)有的屬性對(duì)價(jià)格進(jìn)行優(yōu)惠。
1、Fruit類,超類
定義屬性private私有---》構(gòu)造方法初始化對(duì)象---》用get方法取得值
```language
package com.em.fruits;
public class Fruits {
? ? private String name;
? ? private double gprice;
? ? private double price;
? ? private String mark;
? ? public Fruits(String name, double gprice,double price, String mark){
? ? ? ? this.name = name;
? ? ? ? this.gprice = gprice;
? ? ? ? this.price = price;
? ? ? ? this.mark = mark;
? ? }
? ? public String getName() {
? ? ? ? return name;
? ? }
? ? public double getGprice(){
? ? ? ? return gprice;
? ? }
? ? public double getPrice() {
? ? ? ? return price;
? ? }
? ? public String getMark() {
? ? ? ? return mark;
? ? }
}
```
2、子類 Apple.java
定義屬性private私有---》構(gòu)造方法初始化對(duì)象---》set方法賦值屬性---》get方法獲取超類的getPrice(),這里不能直接返回想要的值 ; 這會(huì)報(bào)錯(cuò)的 ---原因是 我文章36.繼承私有域的理解
---》解決 借助接口 + super?
```language
package com.em.fruits;
class Apple extends Fruits {
? ? private double discount;
? ? public void setDiscount(double discount) {
? ? ? ? this.discount = discount;
? ? }
? ? public Apple(String name, double gprice, double price, String mark) {
? ? ? ? super(name, gprice, price, mark);
? ? ? ? discount = 0.00;
? ? }
? ? public double getPrice() {
? ? ? ? double price = super.getPrice();
? ? ? ? return price ?- discount;
? ? }
}
```
2、Orange類 子類
定義屬性private私有---》構(gòu)造方法初始化對(duì)象---》set方法賦值屬性---》get方法獲取超類的getPrice(),這里不能直接返回想要的值 ; 這會(huì)報(bào)錯(cuò)的 ---原因是 我文章36.繼承私有域的理解
```language
package com.em.fruits;
class Orange extends Fruits {
? ? private double discount2;
? ? public void setDiscount2(double discount2) {
? ? ? ? this.discount2 = discount2;
? ? }
? ? public Orange(String name, double gprice, double price, String mark) {
? ? ? ? super(name, gprice, price, mark);
? ? ? ? discount2 = 1.00;
? ? }
? ? public double getPrice(){
? ? ? ? double price = super.getPrice();
? ? ? ? return price * discount2;
? ? }
}
```
3、測試類
用子類創(chuàng)建對(duì)象(new)并賦值---》該對(duì)象調(diào)用子類里面賦好值的set方法---》用超類創(chuàng)建對(duì)象(new)并賦值
后面是循環(huán)遍歷出來,用上面那個(gè)創(chuàng)建好的值+重新建new了3個(gè)對(duì)象---》for(Employee e : staff)(或用其他方法)把數(shù)組循環(huán)遍歷出來---》sout+e.get方法
總結(jié):
? ? public Orange(。。。。。。) {
? ? ? ? super(。。。。。。);
? ? ? ? discount2 = 1.00;
? ? }
? ? public double getPrice(){
? ? ? ? 。。。。。。
? ? ? ? return price * discount2;
? ? }
這邊要初始化discount2為1,不然它默認(rèn)問0,初始價(jià)格可能會(huì)得到0.00,即gprice.
另外數(shù)組表示方式及遍歷方法不止一種。get set方法看需要使用,get得到值,set屬性賦值。
```language
package com.em.fruits;
public class fruitstest {
? ? public static void main(String[] args) {
? ? ? ? Apple a1 = new Apple("apple",5.00,5.00,"特價(jià)");
? ? ? ? a1.setDiscount(1.01);
? ? ? ? System.out.println("name="+a1.getName()+" gprice="+a1.getGprice()+" mark="+a1.getMark()+" price="+a1.getPrice());
? ? ? ? double discount2 = 8;
? ? ? ? Orange a2 = new Orange("orange",6.00,6.00,"促銷"+discount2+"折");
? ? ? ? a2.setDiscount2(discount2 * 0.1);
? ? ? ? double price2 = a2.getPrice();
? ? ? ? price2 = (double)Math.round(price2 * 100) / 100;
? ? ? ? System.out.println("name="+a2.getName()+" gprice="+a2.getGprice()+" mark="+a2.getMark()+" price="+price2);
? ? ? ? System.out.println("--------------循環(huán)遍歷----------------");
// ? ? ? ?Fruits[] fruits = new Fruits[5];//1.常用
? ? ? ? Fruits fruits[] = new Fruits[5];
? ? ? ? fruits[0] = a1;
? ? ? ? fruits[1] = a2;
? ? ? ? fruits[2] = new Fruits("Peach",5.50,5.50,"正常價(jià)格");
? ? ? ? fruits[3] = new Fruits("Hami melon",10.50,10.50,"正常價(jià)格");
? ? ? ? fruits[4] = new Fruits("Banana",2.40,2.40,"正常價(jià)格");
? ? ? ? //第一種方法 需要修改
// ? ? ? ?for(int i = 0; i < fruits.length; i++){
// ? ? ? ? ? ?System.out.println("name=" + fruits[i].getName() +
// ? ? ? ? ? ?" mark=" + fruits[i].getMark() + " price=" + fruits[i].getPrice());
// ? ? ? ?}
? ? ? ? //第二種方法
? ? ? ? for (Fruits e : fruits){
? ? ? ? ? ? double pricefruits = (double)Math.round(e.getPrice() * 100) / 100;
? ? ? ? ? ? System.out.println("name=" + e.getName() + " gprice=" + e.getGprice() + " mark=" + e.getMark() + " price=" + pricefruits);
? ? ? ? }
? ? }
}
```
4、結(jié)果
```language
name=apple gprice=5.0 mark=特價(jià) price=3.99
name=orange gprice=6.0 mark=促銷8.0折 price=4.8
--------------循環(huán)遍歷----------------
name=apple gprice=5.0 mark=特價(jià) price=3.99
name=orange gprice=6.0 mark=促銷8.0折 price=4.8
name=Peach gprice=5.5 mark=正常價(jià)格 price=5.5
name=Hami melon gprice=10.5 mark=正常價(jià)格 price=10.5
name=Banana gprice=2.4 mark=正常價(jià)格 price=2.4
```
本文使用 文章同步助手 同步