通过继承抽象类重写方法,以及数组集合,对商品进行管理的练习(3.8)

需求:

        现在要给顾客提供两个选择,一个是主菜,还有一个是饮品。除了都能显示商品名与价格外,饮品可以选择是常温的、冰镇的;而主菜可以选择加不同分量的辣椒,但需要额外价格。

        顾客能够看到商品列表,并查找对应商品。

思路;

        这里需要用到抽象类,能够让子类继承父类成员变量,以及能够重写相关的方法。然后写一个管理类,定义数组以及无参构造,写增加、展示商品集合,通过商品名查询的方法。然后新建一个集合,然后存商品信息,再调方法操作。

步骤:

        1.创建基本商品类,里面定义商品名和价格,然后构造器,getter、setter方法,重写toString方法。

基本商品类Product

abstract class Product {
    protected String name;
    protected double price;

    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    @Override //重载可以省略
    public String toString() {
        return name + " - 价格: " + price + "元";
    }
}

        2.再让饮品类Drink和主菜类MainDish继承基本商品类Product,再定义成员变量,温度temperature和辣味spiciness,构造器调父类成员变量,再重写toString方法,

Drink类和MainDish类:

class Drink extends Product {
    private String temperature; // 温度:常温或冰镇

    public Drink(String name, double price, String temperature) {
        super(name, price);
        this.temperature = temperature;
    }

    @Override
    public String toString() {
        return super.toString() + " (" + temperature + ")";
    }
}

// 主菜类
class MainDish extends Product {
    private String spiciness; // 辣度:不辣、微辣、特辣

    public MainDish(String name, double price, String spiciness) {
        super(name, price);
        this.spiciness = spiciness;
        // 根据辣度调整价格
        if (spiciness.equals("微辣") || spiciness.equals("特辣")) {
            this.price += 0.5;
        }
    }

    @Override
    public String toString() {
        return super.toString() + " (" + spiciness + ")";
    }
}

        3.再建一个商品管理类ProductManager,私有化集合成员变量,可以用无参构造器生成这个集合对象,再专门写方法对这个对象进行添加,列举和查找功能

ProductManager商品管理类;

class ProductManager {
    private List<Product> products;

    public ProductManager() {
        products = new ArrayList<>();
    }

    // 添加商品
    public void addProduct(Product product) {
        products.add(product);
    }

    // 显示所有商品
    public void displayProducts() {
        for (Product product : products) {
            System.out.println(product);
        }
    }

    // 根据名称查找商品
    public Product findProductByName(String name) {
        for (Product product : products) {
            if (product.getName().equals(name)) {
                return product;
            }
        }
        return null;
    }
}

        4.最后在测试类Main中,新建集合对象,往里添加数组,再列举和查询

Main测试类:

public class Main {
    public static void main(String[] args) {
        // 创建商品管理器
        ProductManager manager = new ProductManager();

        // 添加酒水类商品
        manager.addProduct(new Drink("可乐", 3.0, "常温"));
        manager.addProduct(new Drink("雪碧", 3.0, "冰镇"));
        manager.addProduct(new Drink("冰红茶", 3.0, "常温"));

        // 添加主菜类商品
        manager.addProduct(new MainDish("烤鱼", 15.0, "不辣"));
        manager.addProduct(new MainDish("涮羊肉", 30.0, "微辣"));
        manager.addProduct(new MainDish("烩面", 10.0, "特辣"));

        // 显示所有商品
        System.out.println("所有商品信息:");
        manager.displayProducts();

        // 查找并调用某个商品
        System.out.println("\n查找商品:");
        Product product = manager.findProductByName("涮羊肉");
        if (product != null) {
            System.out.println("找到商品: " + product);
        } else {
            System.out.println("未找到该商品!");
        }
    }
}

全部代码:

import java.util.ArrayList;
import java.util.List;

// 商品基类
abstract class Product {
    protected String name;
    protected double price;

    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    @Override //重写可以省略
    public String toString() {
        return name + " - 价格: " + price + "元";
    }
}

// 酒水类
class Drink extends Product {
    private String temperature; // 温度:常温或冰镇

    public Drink(String name, double price, String temperature) {
        super(name, price);
        this.temperature = temperature;
    }

    @Override
    public String toString() {
        return super.toString() + " (" + temperature + ")";
    }
}

// 主菜类
class MainDish extends Product {
    private String spiciness; // 辣度:不辣、微辣、特辣

    public MainDish(String name, double price, String spiciness) {
        super(name, price);
        this.spiciness = spiciness;
        // 根据辣度调整价格
        if (spiciness.equals("微辣") || spiciness.equals("特辣")) {
            this.price += 0.5;
        }
    }

    @Override
    public String toString() {
        return super.toString() + " (" + spiciness + ")";
    }
}

// 商品管理类
class ProductManager {
    private List<Product> products;

    public ProductManager() {
        products = new ArrayList<>();
    }

    // 添加商品
    public void addProduct(Product product) {
        products.add(product);
    }

    // 显示所有商品
    public void displayProducts() {
        for (Product product : products) {
            System.out.println(product);
        }
    }

    // 根据名称查找商品
    public Product findProductByName(String name) {
        for (Product product : products) {
            if (product.getName().equals(name)) {
                return product;
            }
        }
        return null;
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        // 创建商品管理器
        ProductManager manager = new ProductManager();

        // 添加酒水类商品
        manager.addProduct(new Drink("可乐", 3.0, "常温"));
        manager.addProduct(new Drink("雪碧", 3.0, "冰镇"));
        manager.addProduct(new Drink("冰红茶", 3.0, "常温"));

        // 添加主菜类商品
        manager.addProduct(new MainDish("烤鱼", 15.0, "不辣"));
        manager.addProduct(new MainDish("涮羊肉", 30.0, "微辣"));
        manager.addProduct(new MainDish("烩面", 10.0, "特辣"));

        // 显示所有商品
        System.out.println("所有商品信息:");
        manager.displayProducts();

        // 查找并调用某个商品
        System.out.println("\n查找商品:");
        Product product = manager.findProductByName("涮羊肉");
        if (product != null) {
            System.out.println("找到商品: " + product);
        } else {
            System.out.println("未找到该商品!");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值