栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java-day08

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-day08

1、继承

        继承的关键字是extends;

        继承是Java中类与类之间的一种关系;

        使用继承的好处就是可以用父类封装所有子类的公共代码,让子类继承,实现代码复用

                Dog类只有strain一个成员变量

                 但是在测试类中可以通过dog对象指针调用其父类的成员变量

        发生继承的类称为子类(派生类),被继承的类称为父类(基类);

                父类:

                子类:

         

        一个类只能继承父类,但是一个父类可以有多个子类;

                父类:

                子类:

        如果一个类没有显式的继承父类,则隐式继承object类;

                Animal类没有使用extends继承父类,但是在构造方法中会隐式的继承object类,可以使用object类的toString方法。

        Java不支持多继承,只支持单继承,但支持多级继承;

                多级继承:Dog类继承了Animal类,Animal类虽然没有显示继承,但是隐式继承了父类,父类为object类。

        在继承体系的顶层是object类,object类称为祖先类、上帝类

        构造方法中的第一行有一条隐式指令,super()调用其父类的构造方法

                

                

                        使用Dog类的构造方法,测试隐式super()

                结果:

                        

                                第一个返回dog对象的指针地址;第二个返回toString方法的地址。发现这两种打印方式出来的结果是相同的,所以可以说明,Dog类在调用构造方法的时候,会先执行super()方法,找到Animal类的构造方法,继续执行Animal类的构造方法里的super(),使用object类的构造方法创建对象,Animal再创建对象,最后Dog创建对象,这样dog对象就可以调用object类的toString方法。

                        

        this和super的区别

                this是指向当前对象,super是指向当前父类对象

                this和super的使用方法:

                        1、调用构造方法(只能在构造方法中调用,而且必须出现在第一行)

                                this();可以使用this()调用本类构造方法

                

                

                                super();可以使用super()调用父类构造方法

                

                

                

                        使用Dog类的构造方法,测试隐式super()

                结果:

                        

                                第一个返回dog对象的指针地址;第二个返回toString方法的地址。发现这两种打印方式出来的结果是相同的,所以可以说明,Dog类在调用构造方法的时候,会先执行super()方法,找到Animal类的构造方法,继续执行Animal类的构造方法里的super(),使用object类的构造方法创建对象,Animal再创建对象,最后Dog创建对象,这样dog对象就可以调用object类的toString方法。

        子类可以继承父类的非私有(非private修饰)成员(成员变量、成员方法);

                Animal类中的nickName成员变量为静态变量,dog对象无法调用nickName变量

                

                

        父类的构造方法不能被子类继承,但可以被子类调用,且子类的无参构造方法中会默认调用父类的无参构造方法;

   

                

                        使用Dog类的构造方法,测试隐式super()

                结果:

                        

                                第一个返回dog对象的指针地址;第二个返回toString方法的地址。发现这两种打印方式出来的结果是相同的,所以可以说明,Dog类在调用构造方法的时候,会先执行super()方法,找到Animal类的构造方法,继续执行Animal类的构造方法里的super(),使用object类的构造方法创建对象,Animal再创建对象,最后Dog创建对象,这样dog对象就可以调用object类的toString方法

        能发生继承关系的类在逻辑上应该具有一个"is a"的关系

        狗 is a 动物

        猫 is a 动物

        猪 is a 动物

        枪 is a 武器

        刀 is a 武器

        剑 is a 武器

点餐点赞小程序

        Dish类

package HomeWork03;

public class Dish {
    private String name;
    private Integer price;
    private Integer stock;
    private Integer saleNum;
    private Integer likeNum;

    public void show(){
        System.out.println("**名称:"+this.name);
        System.out.println("*******************************************");
        System.out.print("价格:"+this.price+"   ");
        System.out.print("库存:"+this.stock+"   ");
        System.out.print("已售:"+this.saleNum+"   ");
        System.out.println("点赞数:"+this.likeNum+"   ");
        System.out.println("*******************************************");
    }

    public void sale(){
        like();
        this.saleNum++;
    }

    public void saleOut(int n){
        this.saleNum+=n;
    }

    public void like(){
        this.likeNum++;
    }

    public String getName() {
        return name;
    }

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

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }

    public Integer getSaleNum() {
        return saleNum;
    }

    public void setSaleNum(Integer saleNum) {
        this.saleNum = saleNum;
    }

    public Integer getLikeNum() {
        return likeNum;
    }

    public void setLikeNum(Integer likeNum) {
        this.likeNum = likeNum;
    }
}

        测试Demo01类

package HomeWork03;

import java.util.Scanner;

public class Demo01 {
    static Scanner sc=new Scanner(System.in);
    static Dish[] dishArray=new Dish[5];
    static{
        Dish dish1 = new Dish();
        dish1.setName("清汤白菜");
        dish1.setPrice(18);
        dish1.setStock(20);
        dish1.setSaleNum(253);
        dish1.setLikeNum(102);
        dishArray[0]=dish1;

        Dish dish2 = new Dish();
        dish2.setName("青椒爆炒土豆丝");
        dish2.setPrice(15);
        dish2.setStock(16);
        dish2.setSaleNum(100);
        dish2.setLikeNum(89);
        dishArray[1]=dish2;

        Dish dish3 = new Dish();
        dish3.setName("老干妈炒饭");
        dish3.setPrice(13);
        dish3.setStock(1000);
        dish3.setSaleNum(500);
        dish3.setLikeNum(486);
        dishArray[2]=dish3;
    }

    public static void main(String[] args) {
        int choice=0;
        do {
            System.out.println("**********欢迎进入菜品系统**********");
            System.out.println("1、菜品展示");
            System.out.println("2、添加菜品");
            System.out.println("3、删除菜品");
            System.out.println("4、菜品数组扩容");
            System.out.println("5、点餐");
            System.out.println("6、点赞");
            System.out.println("请输入你的选择:");
            choice=sc.nextInt();
            switch(choice) {
                case 1:
                    System.out.println("1、菜品展示");
                    display();
                    break;
                case 2:
                    System.out.println("2、添加菜品");
                    addDish();
                    break;
                case 3:
                    System.out.println("3、删除菜品");
                    deleteDish();
                    break;
                case 4:
                    System.out.println("4、菜品数组扩容");
                    dilatation();
                    break;
                case 5:
                    System.out.println("5、点餐");
                    saleDish();
                    break;
                case 6:
                    System.out.println("6、点赞");
                    likeDish();
                    break;
                case 7:
                    System.out.println("退出");

                default:
                    break;
            }
        } while (choice!=7);
    }

    //菜品展示
    public static void display(){
        System.out.println("进入菜品展示业务");
        System.out.println();
        for (int i = 0; i < dishArray.length; i++) {
            if (dishArray[i]==null){
                System.out.println("菜品暂空");
            }else{
                dishArray[i].show();
            }
        }
    }

    //添加菜品
    public static void addDish(){
        if (dishArray[dishArray.length-1]!=null){
            System.out.println("菜品已满,请为菜品存储扩容");
            return;
        }
        System.out.println("进入添加菜品业务");
        Dish dish = new Dish();
        System.out.println("请输入菜品名称:");
        dish.setName(sc.next());
        System.out.println("请输入菜品价格:");
        dish.setPrice(sc.nextInt());
        System.out.println("库存数量:");
        dish.setStock(sc.nextInt());
        for (int i = 0; i < dishArray.length; i++) {
            if (dishArray[i]==null){
                dishArray[i]=dish;
                System.out.println("菜品添加成功");
                return;
            }
        }
    }

    //删除菜品
    public static void deleteDish(){
        System.out.println("进入删除菜品业务");
        display();
        System.out.println("请输入想要删除的菜品编号:");
        int deleteDishId=sc.nextInt()-1;
        for (int i = 0; i < dishArray.length; i++) {
            if (dishArray[deleteDishId]==null){
                System.out.println("菜品为空");
                return;
            }
            else if (dishArray[deleteDishId].getStock()-dishArray[deleteDishId].getSaleNum()>0){
                System.out.println("该菜品有剩余库存,无法删除!");
                return;
            }else{
                dishArray[deleteDishId].setName(null);
                dishArray[deleteDishId].setPrice(null);
                dishArray[deleteDishId].setStock(null);
                dishArray[deleteDishId].setSaleNum(null);
                dishArray[deleteDishId].setLikeNum(null);
                System.out.println("菜品删除成功!!!");
            }
        }
    }

    //菜品数组扩容
    public static void dilatation() {
        System.out.println("进入菜品扩容业务");
        Dish[] newArr = new Dish[dishArray.length + dishArray.length/2];
        for (int i = 0; i < dishArray.length; i++) {
            newArr[i]=dishArray[i];
        }
        dishArray=newArr;
        System.out.println("扩容成功,现在菜品可存:"+dishArray.length+"个");
    }

    //点餐
    public static void saleDish(){
        System.out.println("进入订餐业务");
        display();
        System.out.println("请输入菜品编号,以方便点餐:");
        int i=sc.nextInt()-1;
        System.out.println("请输入想要菜品的份数:");
        int n=sc.nextInt();
        for (int i1 = 0; i1 < dishArray.length; i1++) {
            if (dishArray[i1]==null){
                System.out.println("对不起,你输入的菜品不存在或已被删除!");
                return;
            }else {
                int pay=dishArray[i].getPrice()*n;
                dishArray[i].saleOut(n);
                System.out.println("点餐成功,你已支付:"+pay+"元");
                return;
            }
        }
    }

    //点赞
    public static void likeDish(){
        System.out.println("进入点赞业务");
        display();
        System.out.println("请输入想要点赞的菜品编号:");
        int i=sc.nextInt()-1;
        for (int i1 = 0; i1 < dishArray.length; i1++) {
            if (dishArray[i]==null){
                System.out.println("菜品为空,输入错误或者菜品已被删除");
                return;
            }else{
                dishArray[i].like();
                System.out.println("点赞成功!");
                return;
            }
        }
    }
}

        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号