Java多态练习1

本文描述了如何在Java中设计一个基础的Store类,以及其子类DirectSale(直营店)、Franchise(加盟店)和Discount(折扣店)的实现,包括属性和方法的封装、继承、重写以及实例化操作,展示了面向对象编程中的多态性。
摘要由CSDN通过智能技术生成

题目:
设计店铺类Store,属性包括店铺名称、店铺地址、员工人数、注册资金;方法包括开店闭店购物

设计店铺类子类:
直营店DirectSale,继承店铺类,属性包含店长姓名、送货工人人数、商品起送金额、特殊商品折扣比率;方法包括送货。

加盟店Franchise,继承店铺类,属性包含加盟商姓名、加盟金额、加盟时间(字符串);方法包括解约。

折扣店Discount,继承店铺类,属性包括最大折扣、最小折扣、是否打折;方法包括打折。

要求:
1、所有父子类均完成get和set封装,以及构造方法(无参构造方法和有参构造方法)封装。

2、子类继承父类时,重写父类开店、闭店、购物方法,方法体为输出开店闭店时间。

3、参观某店,输出这个店铺的全部信息(例如参观直营店,输出店铺信息及店长名称、起送金额等)。

4、手动输入(直营店、加盟店、折扣店),判断输入内容,实例化不同子类对象,初始化店铺信息。

5、去某店购物,直营店要求输入购买金额判断是否能够配送,判断送货工人人数是否能够配送;加盟店要求输入加盟金额,判断是否可以加盟;折扣店输入购买金额,判断是否开始打折,如果未开始打折,输出对不起,未开始打折活动,如果以开始打折,输出最大折扣和最小折扣。使用instanceof关键字判断(提高)

6、编写测试类完成相关功能输入和输出

package com.jsu.java;

public class Store {
    private String shopName;//店铺名称
    private String shopAddr;//店铺地址
    private int num;//员工人数
    private double ReMoney;//注册资金

    public Store() {
    }

    public Store(String shopName, String shopAddr, int num, double reMoney) {
        this.shopName = shopName;
        this.shopAddr = shopAddr;
        this.num = num;
        ReMoney = reMoney;
    }

    public String getShopName() {
        return shopName;
    }

    public void setShopName(String shopName) {
        this.shopName = shopName;
    }

    public String getShopAddr() {
        return shopAddr;
    }

    public void setShopAddr(String shopAddr) {
        this.shopAddr = shopAddr;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public double getReMoney() {
        return ReMoney;
    }

    public void setReMoney(double reMoney) {
        ReMoney = reMoney;
    }
    public void print(){
        System.out.println("店铺名称为:"+this.getShopName());
        System.out.println("店铺地址为:"+this.getShopAddr());
        System.out.println("员工人数为:"+this.getNum());
        System.out.println("注册资金为:"+this.getReMoney());
    }
    public void openShop(){//开店

    }
    public void closeShop(){//闭店

    }
    public void shopping(){//购物

    }
}

package com.jsu.java;

public class Discount extends Store{
    private double minDiscount;//最小折扣
    private double maxDiscount;//最大折扣
    private boolean isNoD;//是否打折

    public Discount() {
        super();
    }

    public Discount(double minDiscount, double maxDiscount, boolean isNoD) {
        this.minDiscount = minDiscount;
        this.maxDiscount = maxDiscount;
        this.isNoD = isNoD;
    }
    @Override
    public void openShop() {
        System.out.println("折扣店开店时间为6:00");

    }

    @Override
    public void closeShop() {
        System.out.println("折扣店闭店时间为22:00");

    }

    @Override
    public void shopping() {
        System.out.println("折扣店购物了");
    }
    @Override
    public void print(){
        System.out.println("最小折扣是:"+this.minDiscount);
        System.out.println("最大折扣为:"+this.maxDiscount);
        System.out.println("是否打折:"+this.isNoD);
    }

    public void discount(){
        if(this.isNoD)
        {
            System.out.println("打折活动开始啦!!!");
            System.out.println("最小折扣是:"+this.minDiscount);
            System.out.println("最大折扣为:"+this.maxDiscount);
        }
        else {
            System.out.println("对不起,还未开始打折活动");
        }
    }
}

package com.jsu.java;

import java.util.Scanner;

public class Franchise extends Store{
    private String busiName;//加盟商姓名
    private double fMoney;//加盟金额
    private String ftime;//加盟时间(字符串)

    public Franchise() {
    }

    public Franchise(String busiName, double fMoney, String ftime) {
        this.busiName = busiName;
        this.fMoney = fMoney;
        this.ftime = ftime;
    }
    public static void cancel(double fMoney) {
        System.out.println("加盟店是否可以加盟,是否解约?");
        System.out.println("请输入你想要加盟的金额:");
        Scanner scanner = new Scanner(System.in);
        double money = scanner.nextInt();
        if(fMoney>money){
            System.out.println("抱歉,你的加盟费用不够,不能加盟!");
        }else {
            System.out.println("加盟成功!祝贺!!");
        }
    }
    @Override
    public void print(){
        System.out.println("加盟商姓名是:"+this.busiName);
        System.out.println("至少的加盟金额为:"+this.fMoney);
        System.out.println("加盟时间最短为为:"+this.ftime);
    }

    @Override
    public void openShop() {
        System.out.println("加盟店开店时间为7:30");

    }

    @Override
    public void closeShop() {
        System.out.println("加盟店闭店时间为21:00");

    }

    @Override
    public void shopping() {
        System.out.println("加盟店购物了");
        cancel(this.fMoney);
    }

}
package com.jsu.java;

import java.util.Scanner;

public class DirectSale extends Store{
    private String name;//店长姓名
    private int deliveryNum;//送货工人人数
    private double upToMoney;//商品起送金额
    private double discount;//特殊商品折扣比率

    public DirectSale() {
        super();
    }

    public DirectSale(String name, int deliveryNum, double upToMoney, double discount) {
        this.name = name;
        this.deliveryNum = deliveryNum;
        this.upToMoney = upToMoney;
        this.discount = discount;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getDeliveryNum() {
        return deliveryNum;
    }

    public void setDeliveryNum(int deliveryNum) {
        this.deliveryNum = deliveryNum;
    }

    public double getUpToMoney() {
        return upToMoney;
    }

    public void setUpToMoney(double upToMoney) {
        this.upToMoney = upToMoney;
    }

    public double getDiscount() {
        return discount;
    }

    public void setDiscount(double discount) {
        this.discount = discount;
    }
    public static void deliver(double upToMoney, double deliveryNum) {
        System.out.println("请输入购买的金额:");
        Scanner scanner = new Scanner(System.in);
        double money = scanner.nextInt();
        if(money>upToMoney){
            System.out.println("你购买的商品金额充足,可以配送!");
            if(deliveryNum > 0){
                System.out.println("有骑手空闲,骑手正在为你送货!");
            }else{
                System.out.println("因为骑手人数不够,不能配送!请稍后!");
            }
        }else {
            System.out.println("你所购买的商品不支持配送!");
        }
    }
    @Override
    public void openShop() {
        System.out.println("直营店开店时间为8:00");

    }
    @Override
    public void closeShop() {
        System.out.println("直营店闭店时间为23:00");

    }

    @Override
    public void shopping() {
        System.out.println("直营店购物了");
        deliver(this.getUpToMoney(),this.getDeliveryNum());
    }
    @Override
    public void print(){
        System.out.println("店长姓名是:"+this.name);
        System.out.println("送货工人人数为:"+this.deliveryNum);
        System.out.println("商品起送金额为:"+this.upToMoney);
        System.out.println("特殊商品折扣比率为:"+this.discount);
    }

}
package com.jsu.java;

import java.util.Scanner;

import static javafx.beans.binding.Bindings.select;

public class Demo001 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Store store = new Store("翔霖商店","6799大街",65,65000.00);
        store.print();
        String str;
        while (true){
            System.out.println("请输入店铺类型:");
            str = sc.next();
            Store store1 = select(str);
            store1.openShop();
            store1.closeShop();
            store.print();
            store1.print();
            store1.shopping();
        }
    }
    private static Store select(String str){
        Store sr = null;
        if("DirectSale".equals(str)){
            sr = new DirectSale("张三",12,15.0,0.8);
        }else if("Franchise".equals(str)){
            sr = new Franchise("李四",5000,"5年");
        }else if("Discount".equals(str)){
            sr = new Discount(0.95,0.8,true);

        }else{
            System.out.println("输入错误!");
            sr = new Store();
        }
        return sr;
    }
}

结果展示:
Discount:
在这里插入图片描述
Franchise:
在这里插入图片描述

另一种情况:
在这里插入图片描述
DirectSale:

在这里插入图片描述
另一种情况:

在这里插入图片描述

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值