2015年8月5日 星期三

Java作業練習:抽象&介面_收銀機

注意:
類別只能繼承一個類別,但可實作多個介面
介面可以繼承多個介面

類別圖


Code
public interface 有價格的 {

    int getPrice();
}


public interface 有名稱的 {

    String getName();
}


public interface 商品 extends 有名稱的, 有價格的 {

}

class 屠龍刀 implements 商品 {

    @Override
    public String getName() {
        return "屠龍刀";

    }

    @Override
    public int getPrice() {
        return 6000;
    }

}

class 倚天劍 implements 商品 {

    @Override
    public String getName() {
        return "倚天劍";

    }

    @Override
    public int getPrice() {
        return 4000;
    }

}

class 青龍劍 implements 商品 {

    @Override
    public String getName() {
        return "青龍劍";

    }

    @Override
    public int getPrice() {
        return 8000;
    }

}


interface 折扣活動 {
    int 計算(商品[] products);
}

class 父親節 implements 折扣活動{

    @Override
    public int 計算(商品[] products) {
        int sum=0;
        for (int i=0;i<products.length;i++){
            sum+=products[i].getPrice();
        }
        return (int)(sum*0.8);

        }
    
}

class 母親節 implements 折扣活動{

    @Override
    public int 計算(商品[] products) {
        int sum=0;
        for (int i=0;i<products.length;i++){
            sum+=products[i].getPrice();
        }
        return (int)(sum*0.7);

        }
    
}


public class 收銀機 {
    private  折扣活動 strategy;
    private  商品[] products;

    public 收銀機(折扣活動 strategy, 商品[] products) {
        this.strategy = strategy;
        this.products = products;
    }
    
    public void print(){
        String s="";
        int sum=0;
        for (int i=0;i<products.length;i++){
            s=products[i].getName()+"\t"+products[i].getPrice();
            sum+=products[i].getPrice();
            System.out.println(s);
        }
        
        System.out.println("總金額\t"+sum+"\t折扣後\t"+strategy.計算(products));
    }
    
}


public class Test {

    public static void main(String[] args) {
//        商品[] products={new 倚天劍(),new 屠龍刀()};
//        收銀機 cashier=new 收銀機(new 父親節(),products);
        商品[] products={new 倚天劍(),new 屠龍刀(),new 青龍劍()};
        收銀機 cashier=new 收銀機(new 母親節(),products);
        cashier.print();
    }

}

沒有留言:

張貼留言