一个对象可以同时被多个指针指向
一个指针可以指向不同的对象, 但是同一时刻只能指向1个
1. 指针是可以传递的
从栈中传递到堆区
例如: 领养宠物成功后, 将宠物对象的指针传递到宠物数组中进行存储
随机生成怪物对象后, 将怪物对象的指针传递到怪物数组中进行存储
从栈中传递到另一个栈中
例如: 宠物杀死怪物成功后, 调用宠物的killOk方法, 并把怪物的指针传递
到killOk方法中, 这样可以在killOk方法中通过怪物的指针获取到被杀死的怪物对象中的信息
2. 禁止直接操作对象中的属性, 用成员方法封装操作对象属性的过程
对象中的属性被private封装了
所有操作都应该提供成员方法, 用指针去调用成员方法来操作
例如: 当宠物攻击或被攻击, 怪物攻击或被攻击, 都应该提供对应的成员方法进行调用
package ordering; import java.util.Scanner; public class Demo1 { static Scanner sc=new Scanner(System.in); static Dish[] dish = new Dish[5]; static long money=100; public static void main(String[] args) { int choise=0; do { 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("7.退出点餐"); choise=sc.nextInt(); switch (choise){ case 1: System.out.println("菜品展示"); display(); break; case 2: System.out.println("菜品添加"); addDish(); break; case 3: System.out.println("菜品删除"); deleteDish(); break; case 4: System.out.println("菜单扩容"); dilataition(); break; case 5: System.out.println("进入点餐"); saleDish(); break; case 6: System.out.println("进入点赞"); likeDish(); break; case 7: System.out.println("退出点餐"); break; } }while (choise!=7); System.out.println("退出点餐系统"); } private static void display() { System.out.println("菜单展示"); for (int i = 0; i < dish.length; i++) { System.out.println((i+1)+"号菜品"); if (dish[i]==null){ System.out.println((i+1)+"号菜品售尽"); }else { dish[i].show(); } } } private static void addDish() { for (int i = 0; i < dish.length; i++) { if (dish[i]==null) { System.out.println("进入菜品添加系统"); display(); Dish a = new Dish(); System.out.println("菜品名字:"); a.setName(sc.next()); System.out.println("菜品价格:"); a.setPrice(sc.nextDouble()); System.out.println("菜品数量:"); a.setStock(sc.nextInt()); System.out.println("菜品售出数:0"); a.setSaleNum(0); System.out.println("菜品点赞:0"); a.setLikeNum(0); for (int j = 0; j < dish.length; j++) { if (dish[j] == null) { dish[j] = a; System.out.println((i + 1) + "号菜栏添加成功"); break; } }break; } else if (i == dish.length - 1) { System.out.println("菜栏已满,请扩容"); return; } } } private static void deleteDish(){ System.out.println("进入菜品删除系统"); display(); System.out.println("请输入要删除的菜品"); int index =sc.nextInt()-1; if (dish[index]==null){ System.out.println("该菜品不存在"); return; }else if (dish[index].getStock()-dish[index].getSaleNum()!=0){ System.out.println("还有库存无法删除"); }else { for (int i = 0; i < dish.length; i++) { if ((dish[i].getStock() - dish[i].getSaleNum()) == 0) { //dish[i]=null; dish[i] = dish[i + 1]; System.out.println("菜品删除成功"); break; } } } dish[dish.length-1]=null; } private static void dilataition(){ System.out.println("进入菜单扩容"); Dish[] arr =new Dish[(3*dish.length)/2]; for (int i = 0; i < dish.length; i++) { arr[i]=dish[i]; }dish=arr; System.out.println("菜单扩容成功"); } private static void saleDish() { System.out.println("进入点餐系统"); display(); System.out.println("请输入餐品号"); int i = sc.nextInt()-1; if (dish[i] == null) { System.out.println("该菜品不存在,请重新选择"); } else if (dish[i].getStock() == null) { System.out.println("该菜品库存不足,请重新选择"); } else { System.out.println("请输入点餐份数"); int n = sc.nextInt(); if (n>dish[i].getStock()){ System.out.println("库存余额不足"); }else { dish[i].saleOut(n); System.out.println("需要支付金额" + n * dish[i].getPrice() + "元"); if (money < n * dish[i].getPrice()) { System.out.println("余额不足,支付失败"); } else { money -= n * dish[i].getPrice(); System.out.println("支付成功"); System.out.println("您的余额" + money); } } } } private static void likeDish(){ System.out.println("进入点赞业务"); display(); System.out.println("请输入要点赞的菜品"); int i=sc.nextInt()-1; if (dish[i]==null){ System.out.println("该菜品不存在,请重新选择"); }else dish[i].like(); System.out.println("点赞成功"); } }