Java多态练习

多态三个特点:

(1)继承

(2)重写

(3)父类引用指向子类对象(向上转型),子类引用指向父类对象(向下转型)

第一题

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

设计店铺类子类

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

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

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

要求

1、所有父子类均完成getset封装以及构造方法无参构造方法和有参构造方法封装

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

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

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

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

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

 

第二题

设计金融产品类Financial属性包括产品名称产品介绍起投金额产品期限int)、年化收益百分数);方法包括发布截止投资

设计金融产品类子类

基金产品Fund继承金融产品类属性包括投资地区投资人投资金额

股票产品Shares继承金融产品类属性包括股票价值购买价格购买 笔数

要求

1所有父子类均完成getset封装以及构造方法无参构造方法和有参构造方法封装

2子类继承父类时重写父类发布截止投资方法方法体为输出发布截止时间

3输入购买产品判断实例化哪个子类对象初始化父子类属性

4投资投资基金产品时判断投资金额是否超过起投金额如果未超过提示投资失败如果超过输出基金产品完整信息并计算年化收益。(年化收益=投资金额*期限*年化收益

5投资投资股票产品时判断投资金额是否超过起投金额如果未超过提示投资失败如果超过输出股票产品完整信息并计算年化收益年化收益=投资金额*笔数*期限*年化收益

6投资时使用instanceof关键字判断

 

 

 

 

第一题:
package homework;

public class Store {
    public String name;
    public String address;
    public int number;
    public double money;
    
    public void openStore()
    {

    }
    public void closeStore()
    {
        
    }
    public void shop()
    {
        
    }
    public void information()
    {
        
    }
    public Store() {
        super();
    }
    public Store(String name, String address, int number, double money) {
        this.name = name;
        this.address = address;
        this.number = number;
        this.money = money;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
}
package homework;

import java.util.Scanner;

public class DirectScale extends Store {
    private String dianZhangName;
    private int numberWorker;
    private double sendMoney;
    private double rate;

    public void send()
    {
        System.out.println("送货");
    }

    public DirectScale() {
        super();
    }

    @Override
    public void openStore() {
        System.out.println("直营店开店五点");
    }

    @Override
    public void closeStore() {
        System.out.println("直营店闭店二十一点");
    }

    @Override
    public void shop() {
        
        System.out.println("直营店购物");
        System.out.print("请输入您要购买的金额");
        Scanner sc=new Scanner(System.in);
        double num=sc.nextDouble();
        if(num>this.sendMoney&&this.numberWorker>0)
        {
            System.out.println("您可以在这个直营店购买物品");
            numberWorker--;
        }
        else
        {
            System.out.println("不好意思,您不能在此直营店购买");
        }
    }
    public void information()
    {
        System.out.println("欢迎来到直营店,
店铺名字是"+super.name+",
店铺地址是"+super.address+",
员工人数是"+number+",
店长名字是"+dianZhangName+",
起送金额是"+sendMoney);
    }

    public DirectScale(String name, String address, int number, double money,String dianZhangName, int numberWorker, double sendMoney, double rate) {
        super(name, address, number, money);
        this.dianZhangName = dianZhangName;
        this.numberWorker = numberWorker;
        this.sendMoney = sendMoney;
        this.rate = rate;
    }
    
    
}
package homework;

import java.util.Scanner;

public class Franchise extends Store {
    private String joiner;
    private double joinMoney;
    private String time;
    
    public void dismiss()
    {
        System.out.println("解约");
    }
    @Override
    public void openStore() {
        System.out.println("加盟店开店八点");
    }

    @Override
    public void closeStore() {
        System.out.println("加盟店闭店二十点");
    }

    @Override
    public void shop() {
        System.out.println("加盟店购物");
        System.out.print("请输入您加盟金额");
        Scanner sc=new Scanner(System.in);
        double num=sc.nextDouble();
        if(num>this.joinMoney)
        {
            System.out.println("可以加盟");
        }
        else{
            System.out.println("不好意思,您不可以加盟");
        }
    }
    public void information()
    {
        System.out.println("欢迎来到加盟店,
店铺名字是"+super.name+",
店铺地址是"+address+",
员工人数是"+number+",
加盟商名字是"+joiner+",
加盟金额是"+joinMoney+",
加盟时间是"+time);
    }
    public String getJoiner() {
        return joiner;
    }

    public void setJoiner(String joiner) {
        this.joiner = joiner;
    }

    public double getJoinMoney() {
        return joinMoney;
    }

    public void setJoinMoney(double joinMoney) {
        this.joinMoney = joinMoney;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public Franchise(String name, String address, int number, double money,String joiner, double joinMoney, String time) {
        super(name, address, number, money);
        this.joiner = joiner;
        this.joinMoney = joinMoney;
        this.time = time;
    }

    public Franchise() {
        super();
    }

    
    
}
package homework;

import java.util.Scanner;

public class Discount extends Store {
    private double maxCount;
    private double minCount;
    private boolean isCount;
    
    public void Count()
    {
        System.out.println("打折");
    }
    @Override
    public void openStore() {
        System.out.println("折扣店开店八点");
    }

    @Override
    public void closeStore() {
        System.out.println("折扣店闭店二十点");
    }

    @Override
    public void shop() {
        System.out.println("折扣店购物");
        System.out.print("请输入您要购买的金额");
        Scanner sc=new Scanner(System.in);
        double num=sc.nextDouble();
        if(this.isCount)
        {
            System.out.println("您好,我们的最大折扣是"+maxCount*num+",最小折扣是"+minCount*num);
        }else
        {
            System.out.println("不好意思,未开始打折活动");
        }
        
    }
    public void information()
    {
        System.out.println("欢迎来到折扣店,
店铺名字是"+super.name+",
店铺地址是"+address+",
员工人数是"+number+",
最大折扣是"+maxCount+",
最小折扣是"+minCount+",
是否有折扣"+isCount);
    }
    public double getMaxCount() {
        return maxCount;
    }

    public void setMaxCount(double maxCount) {
        this.maxCount = maxCount;
    }

    public double getMinCount() {
        return minCount;
    }

    public void setMinCount(double minCount) {
        this.minCount = minCount;
    }

    public boolean isCount() {
        return isCount;
    }

    public void setCount(boolean isCount) {
        this.isCount = isCount;
    }

    public Discount() {
        super();
    }


    public Discount(String name, String address, int number, double money,double maxCount, double minCount, boolean isCount) {
        super(name, address, number, money);
        this.maxCount = maxCount;
        this.minCount = minCount;
        this.isCount = isCount;
    }
    
}
package homework;

public class Shopping extends Store {
    public void shopping(Store store)
    {
//        Store d=null;
        if(store instanceof DirectScale)
        {
            DirectScale d=(DirectScale) store;
            d.shop();
        }else if(store instanceof Franchise)
        {
            Franchise d=(Franchise) store;
            d.shop();
        }else if(store instanceof Discount)
        {
            Discount d=(Discount) store;
            d.shop();
        }else
        {
            System.out.println("输入店铺信息有误");
        }
    }
}
package homework;

import java.util.Scanner;

public class TestStore {

    public static void main(String[] args) {
        System.out.print("请输入店铺名称(加盟店,折扣店,直营店)");
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        Store s=dianPu(str);
        s.information();
        System.out.println();
        Shopping sho=new Shopping();
        sho.shopping(s);;
        
    }
    
    public static Store dianPu(String str)
    {
        Store d=null;
    
        if("直营店".equals(str))
        {
            d=new DirectScale("直营店", "上海路", 250, 150000, "二娃", 300, 30,0.45);
        }else if("加盟店".equals(str))
        {
            d=new Franchise("加盟店", "长春路", 200, 100000, "大娃", 2000.0, "2020-1-19");
        }else if("折扣店".equals(str))
        {
            d=new Discount("折扣店", "厦门路", 400, 200000, 0.1, 0.7, true);
        }else
        {
            d=new Store();

        }
        
        return d;
    }
}
第二题:
package homework;

public class Financial {
    protected String name;
    protected String introduce;
    protected double investMoney;
    protected int date;
    protected double fortune;
    
    public void start()
    {
        System.out.println("发布时间");
    }
    public void stop()
    {
        System.out.println("截止时间");
    }
    public void invest()
    {
        System.out.println("投资");
    }
    public Financial(String name, String introduce, double investMoney, int date, double fortune) {
        this.name = name;
        this.introduce = introduce;
        this.investMoney = investMoney;
        this.date = date;
        this.fortune = fortune;
    }
    public Financial() {
        super();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getIntroduce() {
        return introduce;
    }
    public void setIntroduce(String introduce) {
        this.introduce = introduce;
    }
    public double getInvestMoney() {
        return investMoney;
    }
    public void setInvestMoney(double investMoney) {
        this.investMoney = investMoney;
    }
    public int getDate() {
        return date;
    }
    public void setDate(int date) {
        this.date = date;
    }
    public double getFortune() {
        return fortune;
    }
    public void setFortune(double fortune) {
        this.fortune = fortune;
    }
    
}
package homework;

public class Fund extends Financial {
    private String investArea;
    private String investPeople;
    private double investMoneyDown;
    
    
    public void start()
    {
        System.out.println("基金发布时间是2021-9-23");
    }
    public void stop()
    {
        System.out.println("基金截止时间是2021-10-23");
    }

    @Override
    public void invest() {
        System.out.println("基金投资");
        if(investMoneyDown>investMoney)
        {
            System.out.println("此基金名称是"+name+",
基金状态为"+introduce+",
产品期限是"+date+",
年化收益是"+fortune+",
投资地区是"+investArea+",
投资人是"+investPeople+",
投资金额是"+investMoneyDown);
            System.out.println();
            System.out.println("年化收益是"+investMoneyDown*date*fortune);
            
        }else
        {
            System.out.println("投资失败");
        }
    }

    public Fund() {
        super();
    }
    
    public String getInvestArea() {
        return investArea;
    }
    public void setInvestArea(String investArea) {
        this.investArea = investArea;
    }
    public String getInvestPeople() {
        return investPeople;
    }
    public void setInvestPeople(String investPeople) {
        this.investPeople = investPeople;
    }
    public double getInvestMoneyDown() {
        return investMoneyDown;
    }
    public void setInvestMoneyDown(double investMoneyDown) {
        this.investMoneyDown = investMoneyDown;
    }
    public Fund(String name, String introduce, double investMoney, int date, double fortune) {
        super(name, introduce, investMoney, date, fortune);
    }

    public Fund(String name, String introduce, double investMoney, int date, double fortune, String investArea,
            String investPeople, double investMoneyDown) {
        super(name, introduce, investMoney, date, fortune);
        this.investArea = investArea;
        this.investPeople = investPeople;
        this.investMoneyDown = investMoneyDown;
    }
    
    
}
package homework;

public class Shares extends Financial {
    private double sharesValue;
    private double purchaseMoney;
    private double purchaseNumber;
    
    
    
    public void start()
    {
        System.out.println("股票发布时间是2021-12-1");
    }
    public void stop()
    {
        System.out.println("股票截止时间是2021-12-31");
    }
    @Override
    public void invest() {
        System.out.println("股票投资");
        if(purchaseMoney>investMoney)
        {
            System.out.println("此股票名称是"+name+",
股票状态为"+introduce+",
股票期限是"+date+",
年化收益是"+fortune+",
股票价值是"+sharesValue+",
购买价值是"+purchaseMoney+"购买数量是"+purchaseNumber);
            System.out.println();
            System.out.println("年化收益是"+purchaseMoney*date*fortune);
            
        }else
        {
            System.out.println("投资失败");
        }
    }

    public Shares(String name, String introduce, double investMoney, int date, double fortune, double sharesValue,
            double purchaseMoney, double purchaseNumber) {
        super(name, introduce, investMoney, date, fortune);
        this.sharesValue = sharesValue;
        this.purchaseMoney = purchaseMoney;
        this.purchaseNumber = purchaseNumber;
    }
    public Shares() {
        super();
    }
    public Shares(String name, String introduce, double investMoney, int date, double fortune) {
        super(name, introduce, investMoney, date, fortune);
    }
    public double getSharesValue() {
        return sharesValue;
    }
    public void setSharesValue(double sharesValue) {
        this.sharesValue = sharesValue;
    }
    public double getPurchaseMoney() {
        return purchaseMoney;
    }
    public void setPurchaseMoney(double purchaseMoney) {
        this.purchaseMoney = purchaseMoney;
    }
    public double getPurchaseNumber() {
        return purchaseNumber;
    }
    public void setPurchaseNumber(double purchaseNumber) {
        this.purchaseNumber = purchaseNumber;
    }
    
    
}
package homework;

public class Purchasing {
    public void buy(Financial f)
    {
        if(f instanceof Fund)
        {
            Fund d=(Fund) f;
            d.invest();
        }else if(f instanceof Shares)
        {
            Shares d=(Shares) f;
            d.invest();
        }else{
        System.out.println("输入产品类型错误");
        }
    }
}
package homework;

import java.util.Scanner;

public class TestFinancial {

    public static void main(String[] args) {
        System.out.print("请输入购买产品");
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        Financial a=ChanPin(str);
        Purchasing p=new Purchasing();
        p.buy(a);
        
    }
    public static Financial ChanPin(String str)
    {
        Financial d=null;
    
        if("基金".equals(str))
        {
            d=new Fund("人寿基金", "优", 500, 2, 0.005, "北京", "大娃", 1000);
        }else if("股票".equals(str))
        {
            d=new Shares("宝泰股票", "中", 300, 3, 0.015, 500.0,400.0,2.0);
        }else
        {
            d=new Financial("父类", "差", 600, 2, 0.001);

        }
        
        return d;
    }

}
原文地址:https://www.cnblogs.com/lumc5/p/15134813.html