Java(二)面向对象

面向对象

目录

面向对象

练习一:下载Eclipse Java EE版,并练习使用Eclipse编译器进行Java程序设计

练习二:类设计

货物类Item

购物车项目类CartItem(即购物车的一行)

练习三: 在主方法中实现下述功能

定义购物车类Cart对象

对购物车添加4个购物车项目并打印购物车信息

修改商品编号为2购物车项目的购买数量为7并打印购物车信息

对购物车删除商品编号为3的购物车项目,并打印购物车信息

清空购物车,并打印购物车信息

设计结算接口SettleAccount,定义方法getAccount()

设计订单类Order,类中拥有购物车Cart属性及其getter和setter方法以及无参构造方法和以Cart属性为参数的构造方法,设计抽象方法printOrderInfo()用来输出购物车信息和结算金额。

设计普通顾客订单类NormalOrder和会员顾客订单类VIPOrder,继承Order类,要求两个类都实现SettleAccount接口:普通顾客结算,结算金额为购物车价格总计,加配送费8元;会员顾客结算,结算金额为购物车价格总计的9折,并无需配送费。之后,实现根据普通顾客、会员实现不同的printOrderInfo打印效果。

分别对购物车添加若干购物车物品,并打印订单信息

分别修改某一购物车物品的数量,并打印订单信息

分别对购物车删除若干购物车物品,并打印订单信息

总结:


练习一:下载Eclipse Java EE版,并练习使用Eclipse编译器进行Java程序设计

下载Eclipse Java EE2018版成功后,新建项目新建类,使用Eclipse编译器进行Java程序设计。

 

 

 

练习二:类设计

货物类Item

货物类Item代码:

package mySecondJavaPractice;



public class Item {

        // TODO Auto-generated method stub

            private int id;//商品编号

            private String name;//商品名称

            private double price;//商品价格

            private String description;//商品描述

            //无参构造函数

            Item()

            {

               

            }

             Item(int id,String name,double price,String description)

             {

              this.id=id;//在构造方法中,this代表使用该构造方法创建的对象

              this.name=name;

              this.price=price;

              this.description=description;

             }

            public int getId() {

                return id;

            }

            public void setId(int id) {

                this.id = id;//在实例方法中,this代表正在调用该方法的当前对象
                             //其中,this不能出现在类方法中,类方法调用对象格式,类名.方法

            }

            public String getName() {

                return name;

            }

            public void setName(String name) {

                this.name = name;

            }

            public double getPrice() {

                return price;

            }

            public void setPrice(double price) {

                this.price = price;

            }

            public String getDescription() {

                return description;

            }

            public void setDescription(String description) {

                this.description = description;

            }

 //重写toString方法

            public String toString()

            {

                return id + "\t " + name+"\t "+price+"\t "+description;

            }

            public static void main(String[] args) {

            Item item1=new Item(1,"Benifit眉粉                     ",228,"眉粉魔力宝盒套组");

            Item item2=new Item(2,"Laura Mercier高光",265,"highlight-01");

            Item item3=new Item(3,"空山新雨多功能刷                   ",35,"多功能定妆GP02");

            Item item4=new Item(4,"丝光唇釉                                     ",225,"152#暗紫色");

                System.out.println("商品编号\t商品名称                                           \t价格         \t商品描述");

            System.out.println(item1.toString());

            System.out.println(item2.toString());

            System.out.println(item3.toString());

            System.out.println(item4.toString());

            }

    }

输出打印结果:


购物车项目类CartItem(即购物车的一行)

购物车项目类CartItem代码:

package mySecondJavaPractice;



import java.util.ArrayList;//使用ArrayList是明智之举



public class Cart {



            private double totalPrice; //价格总计totalPrice

            private ArrayList<CartItem> cartItem=new ArrayList<CartItem>(); //cartItem的存储

            Cart()

            {

              totalPrice=0;

            }

            Cart(CartItem cartItem)//以一行CartItem存储加入并获取价格

            {

              this.cartItem.add(cartItem);

              totalPrice=cartItem.getPrice();

            }

            Cart(ArrayList<CartItem> cartItem)//将若干行的CartItem存储加入并获取价格总计

            {

              totalPrice=0;

              this.cartItem.addAll(cartItem);

              for(int i=0;i<cartItem.size();i++)

              {

              totalPrice=totalPrice+cartItem.get(i).getPrice();

              }

            }

            public ArrayList<CartItem> getCartItem()

            {

              return cartItem;

            }

            public void setCartItem(CartItem cartItem,int i)//修改某一购物车项目的购买数量

            {

              int t=this.cartItem.indexOf(cartItem);//由Java(一),indexOf得到位置

                totalPrice=totalPrice-this.cartItem.get(t).getPrice();

                this.cartItem.get(t).setQuantity(i);

                totalPrice=totalPrice+this.cartItem.get(t).getPrice();//【注】当购物车中的购物车物品发生改变时,价格总计totalPrice应变化

            }

            public double gettotalPrice()

            {

              return totalPrice;

            }

            //增加一个购物车物品方法addCartItem()

            public void addCartItem(CartItem cartItem)

            {

              this.cartItem.add(cartItem);

              totalPrice=totalPrice+cartItem.getPrice();//【注】当购物车中的购物车物品发生改变时,价格总计totalPrice应变化

            }

            public void addCartItem(ArrayList<CartItem> cartItem)

            {

              this.cartItem.addAll(cartItem);

              for(int i=0;i<=cartItem.size();i++)

              {

              totalPrice=totalPrice+cartItem.get(i).getPrice();//【注】当购物车中的购物车物品发生改变时,价格总计totalPrice应变化

              }

            }

            //删除一个购物车物品方法deleteCartItem()

            public void deleteCartItem(int i)

            {

              cartItem.remove(i);

              totalPrice=totalPrice-cartItem.get(i).getPrice();//【注】当购物车中的购物车物品发生改变时,价格总计totalPrice应变化

            }

            public void deleteCartItem(CartItem cartItem)

            {

              this.cartItem.remove(cartItem);

              totalPrice=totalPrice-cartItem.getPrice();//【注】当购物车中的购物车物品发生改变时,价格总计totalPrice应变化

            }



            public void deleteCartItem(ArrayList<CartItem> cartItem)

            {

              this.cartItem.removeAll(cartItem);

              for(int i = 0;i<cartItem.size();i++) {

                  if(this.cartItem.remove(cartItem.get(i))) {

                      totalPrice=totalPrice-cartItem.get(i).getPrice();//【注】当购物车中的购物车物品发生改变时,价格总计totalPrice应变化 

                  }

              }

             

            }

            //清空购物车方法clearCartItem()

            public void clearCartItem()

            {

              cartItem.clear();

              totalPrice=0;//【注】当购物车中的购物车物品发生改变时,价格总计totalPrice应变化

             

            }

           public void PrinttoString()

            {

            System.out.println("商品编号\t商品名称                                           \t价格         \t商品描述                    \t商品数量\t价格小计");

             for(int i = 0;i<cartItem.size();i++)

                {

              System.out.println(cartItem.get(i).toString());

                }

                 System.out.println("总计: "+gettotalPrice());

            }

          

          //面向对象抽象编程||面向接口编程

          interface SettleAccount{//接口声明

             public abstract int  getAccount();//接口体,等价写法:int  getAccount();

             }

           public abstract class Order{ 

                

              public Cart c;//注意:一定要加上public,因为访问权限不能降低     

              Order(){

               

              }

              public Order(Cart c){

               this.c=c;

           }

             public Cart getCart() {

                return c;

             }

            public void setCart(Cart c) {

                this.c = c;

            }

             //设计抽象方法printOrderInfo()用来输出购物车信息和结算金额。

                 public abstract void printOrderInfo();//接口中,只声明无具体实现

         }

         //普通顾客结算,结算金额为购物车价格总计,加配送费8元

           public class NormalOrder extends Order{

           NormalOrder(){

                

           }

            public NormalOrder(Cart c){

               this.c=c;

            }

            public double  getAccount() {

                return  gettotalPrice()+8;

             }

            

            public void printOrderInfo() {

               

                System.out.println("普通顾客结算金额总计:"+getAccount()); 

             }

             

           }

         //会员顾客结算,结算金额为购物车价格总计的9折,并无需配送费

          public class VIPOrder extends Order{

           VIPOrder(){

               

          }

           public VIPOrder(Cart c){

              this.c=c;             

            }

            public double  getAccount() {

                return  gettotalPrice()*0.9;

             }

            

            public void printOrderInfo(){

              

                System.out.println("VIP顾客结算金额总计:"+getAccount());

                 

             }        

           }

           public static void main(String[] args)

            {

            Item item1=new Item(1,"Benifit眉粉                     ",228,"眉粉魔力宝盒套组");

            Item item2=new Item(2,"Laura Mercier高光",265,"highlight-01");

            Item item3=new Item(3,"空山新雨多功能刷                   ",35,"多功能定妆GP02");

            Item item4=new Item(4,"丝光唇釉                                     ",225,"152#暗紫色");

           

            CartItem CartItem1=new CartItem(item1,2);

            CartItem CartItem2=new CartItem(item2,3);

            CartItem CartItem3=new CartItem(item3,5);

            CartItem CartItem4=new CartItem(item4,1);

            ArrayList<CartItem> cartItem=new ArrayList<CartItem>();

            cartItem.add(CartItem1);//2)对购物车添加若干购物车项目并打印购物车信息

            cartItem.add(CartItem2);

            cartItem.add(CartItem3);

            cartItem.add(CartItem4);

                 Cart c=new Cart(cartItem);//1)定义购物车类Cart对象

                 /*System.out.println("    对购物车添加4个购物车项目并打印购物车信息     ");

            c.PrinttoString();

             System.out.println("**********************************************");      

             System.out.println("    修改商品编号为2购物车项目的购买数量为7并打印购物车信息     ");

            c.setCartItem(CartItem2,7);//3)修改某一购物车项目的购买数量并打印购物车信息

             c.PrinttoString();

             System.out.println("**********************************************");

             System.out.println("    对购物车删除商品编号为3的购物车项目,并打印购物车信息    ");

             c.deleteCartItem(2);//4)对购物车删除商品编号为3的购物车项目,并打印购物车信息  

            c.PrinttoString();  

             System.out.println("**********************************************");  

             c.clearCartItem();//5)清空购物车,并打印购物车信息

             System.out.println("    清空购物车,并打印购物车信息    ");

            c.PrinttoString();

             System.out.println("**********************************************");*/

            

             /*NormalOrder normalOrder=c.new NormalOrder();

             VIPOrder vIPOrder=c.new VIPOrder();

            System.out.println("    分别对购物车添加4个购物车物品,并打印订单信息    ");

            cartItem.add(CartItem1);//9)分别对购物车添加4个购物车物品,并打印订单信息

            cartItem.add(CartItem2);

            cartItem.add(CartItem3);

            cartItem.add(CartItem4);

            c.PrinttoString();

            normalOrder.printOrderInfo();

            vIPOrder.printOrderInfo();

                 System.out.println("**********************************************");

                 System.out.println("    分别修改商品编号为1购物车物品的数量为9,并打印订单信息     ");

            c.setCartItem(CartItem1,9);//10)分别修改商品编号为1购物车物品的数量为9,并打印订单信息

            c.PrinttoString();

            normalOrder.printOrderInfo();

            vIPOrder.printOrderInfo();

             System.out.println("**********************************************");

             System.out.println("    分别对购物车删除商品编号为3购物车物品,并打印订单信息    ");

             c.deleteCartItem(2);//11)分别对购物车删除若干购物车物品,并打印订单信息

             c.PrinttoString();

             normalOrder.printOrderInfo();

             vIPOrder.printOrderInfo();

             System.out.println("**********************************************"); */

            }



}

1-5题代码将第一个/*···*/去掉运行

1-5题结果截图:

6-11题代码将第二个/*···*/注释去掉运行

6-11题结果截图:

 

 

练习三: 在主方法中实现下述功能

 

  1. 定义购物车类Cart对象

  2. 对购物车添加4个购物车项目并打印购物车信息

  3. 修改商品编号为2购物车项目的购买数量为7并打印购物车信息

  4. 对购物车删除商品编号为3的购物车项目,并打印购物车信息

  5. 清空购物车,并打印购物车信息

  6. 设计结算接口SettleAccount,定义方法getAccount()

  7. 设计订单类Order,类中拥有购物车Cart属性及其getter和setter方法以及无参构造方法和以Cart属性为参数的构造方法,设计抽象方法printOrderInfo()用来输出购物车信息和结算金额。

  8. 设计普通顾客订单类NormalOrder和会员顾客订单类VIPOrder,继承Order类,要求两个类都实现SettleAccount接口:普通顾客结算,结算金额为购物车价格总计,加配送费8元;会员顾客结算,结算金额为购物车价格总计的9折,并无需配送费。之后,实现根据普通顾客、会员实现不同的printOrderInfo打印效果。

  9. 分别对购物车添加若干购物车物品,并打印订单信息

  10. 分别修改某一购物车物品的数量,并打印订单信息

  11. 分别对购物车删除若干购物车物品,并打印订单信息

  1-5题的结果截图:

  6-11题 结果截图:

总结:

在完成实验二的过程中,按题目要求,将每个类设计,处理每个类的过程,遇到的一些问题,自行解决了。在写Cart类的过程耗时比较长,遇到很多问题,其中要把主办法的功能写进、加上接口和实现,值得一提的是,能抽象出整个CartItem存储、若干行CartItem一起存储,以及这一系列的增删改;在改的这一方法中使用了SetCartItem实现了对具体位置的商品数量进行更改;在这所有方法中价格总计都实现了伴随变化;在普通顾客和VIP顾客的实现中,使用了接口和实现,采用了类继承,最后定义对象时解决了内部类与外部类的联系。

通过这次实验,熟练掌握了如何设计一个类,以及抽象出类与类之间的关系和对象的存储、getter和setter方法、toString方法、设计接口、实现类继承等。

猜你喜欢

转载自blog.csdn.net/RayMa0305/article/details/81195824