《Java程序设计案例教程(微课版)(第2版)》 课件 项目5 助农超市购物程序-面向对象基础_第1页
《Java程序设计案例教程(微课版)(第2版)》 课件 项目5 助农超市购物程序-面向对象基础_第2页
《Java程序设计案例教程(微课版)(第2版)》 课件 项目5 助农超市购物程序-面向对象基础_第3页
《Java程序设计案例教程(微课版)(第2版)》 课件 项目5 助农超市购物程序-面向对象基础_第4页
《Java程序设计案例教程(微课版)(第2版)》 课件 项目5 助农超市购物程序-面向对象基础_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目5面向对象基础——助农超市购物程序《Java程序设计案例教程(微课版)(第2版)》项目导入

利用Java编写程序模拟消费者在超市购买农产品的需求,以帮助农民更有效地销售其产品。从而增强学生对农村经济发展的关注和责任感,激励他们在今后的学习和工作中,积极为社会发展贡献自己的力量。学习目标•熟悉面向对象编程的3个特征。•掌握类的定义,以及对象的创建与使用。•掌握构造方法,以及this和static关键字的使用。•掌握继承的概念、方法的重写、super关键字。

•培养社会责任感和服务意识,积极为社会发展做出贡献。(素养目标)目录CONTENTS任务5.1面向对象的特征任务5.2类与对象任务5.3

继承项目实施

助农超市购物程序项目实训

网上点餐系统任务5.1面向对象的特征面向对象的特征主要可以概括为封装性、继承性和多态性。1.封装性将对象的属性和行为封装起来,尽可能地隐藏内部的细节,只保留一些对外的接口,使之与外部发生联系,这就是封装的思想。2.继承性继承性主要描述的是类与类之间的关系。继承也是一种代码复用的手段,通过继承,可以在无须重新编写原有类的情况下对原有类的功能进行扩展。3.多态性多态性指的是在程序中允许出现重名的现象。在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。目录CONTENTS任务5.1面向对象的特征任务5.2类与对象任务5.3

继承项目实施

助农超市购物程序项目实训

网上点餐系统目录CONTENTS任务5.2类与对象5.2.1类的定义5.2.2对象的创建与使用5.2.3构造方法5.2.4this关键字5.2.5static关键字5.2.6访问权限修饰符新课导入类与对象是面向对象编程中较重要、核心的两个基本概念。其中,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。5.2.1类的定义在类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也叫作属性;成员方法用于描述对象的行为,可简称为方法。在Java中定义一个类,语法格式如下:[修饰符]class类名{成员变量的定义;成员方法的定义;}

说明:修饰符包括public、final、abstract等,关于这些修饰符的含义后文有详细介绍,目前在定义类的时候可不加。5.2.1类的定义【例5-1】定义学生类。classStudent{ Stringname; intage; voidstudy(){ System.out.println(name+"同学正在学习中。。。。");}}5.2.2对象的创建与使用Java中,创建类的实例对象的语法格式如下:类名对象名称=new类名();例如,创建一个Student类的实例对象,代码如下:Studentstu=newStudent();创建Student类的对象后,便可以通过对象的引用来访问对象的成员了,语法格式如下:对象引用.成员publicclassExample5_2{publicstaticvoidmain(String[]args){Studentstu1=newStudent(); ="张三"; stu1.age=20; stu1.study(); Studentstu2=newStudent(); ="李四"; stu2.age=25; stu2.study(); }}5.2.2对象的创建与使用【例5-2】创建对象并访问对象的成员。任务实践5-1购买火车票【任务描述】在寒暑假期间,学生购买火车票可以享受半价优惠。而如果是普通旅客(儿童、军人等特殊群体除外),则需要全价购买。设计一个购买火车票程序,旅客购票时在控制台输出旅客的姓名、类别、是否全价购票等信息。【任务分析】1.通过任务描述可知需要定义一个旅客类Passenger。2.旅客类具有属性:名字(name)、类别(kind)。3.旅客类具有购票功能:定义一个购票(buyTickets())的方法。4.测试类中创建几个旅客对象并进行购票。任务实践5-2智能电视机的使用【任务描述】智能电视机是一种具备互联网功能的电视机,成为现代家庭娱乐的重要组成部分。编写一个程序,模拟智能电视机的使用。包括显示电视机的配置信息、收看电视节目、播放视频、投屏、玩游戏等。【任务分析】1.通过任务描述可知需要定义一个智能电视机类SmartTV。2.智能电视机具有的属性:品牌(brand)、型号(model)、屏幕尺寸(size)。因此,需要在类中定义对应的成员变量。3.智能电视机具有的功能:显示配置信息(displayInfo())、收看节目(watchTV())、播放视频(showVideo())、投屏(screenProjection()))、玩游戏(playGame())),因此可把这些功能定义为对应的成员方法。4.测试类创建两个智能电视对象并测试其各项功能。任务实践5-3游戏账号的充值与消费【任务描述】编写一个游戏账号充值和消费程序,实现充值和消费功能。【任务分析】1.通过任务描述可知,需要定义一个游戏帐户类GameAccount实现游戏帐户的概念。2.账户的属性包括账号和存款余额,所以需要在类中定义两个成员变量:“帐号”(accountNum)和“游戏币余额”(leftMoney)。3.对账户的操作包括充值、消费、查询余额,所以在类中再定义三个成员方法:“充值”(saveMoney())、“消费”(getMoney())、“查询余额”(getleftMoney())。需要注意:消费的方法中需要先判断要消费的游戏币数额是否小于等于余额,如果是则能消费,如果不是则给出提示:“当前账户余额不够”。4.编写测试类,在main()方法中创建一个GameAccount类的对象ga,假设ga的账号为:123456,初始的存款余额为1000游戏币。首先向该账户充值800游戏币,再消费出600游戏币,继续再消费2000游戏币。5.2.3构造方法构造方法是类的一种特殊方法,可用来初始化类的一个实例对象。它在创建对象(使用new关键字)之后自动调用。构造方法有以下特点。(1)方法名与类名相同。(2)没有任何返回值,连void关键字都不需要。(3)只能与new关键字结合使用。5.2.3构造方法【例5-4】在Student类中定义构造方法。classStudent{ Stringname; intage; Student(Stringn,inta){//定义构造方法 name=n; age=a; } voidstudy(){ System.out.println(name+"同学

年龄"+age+"正在学习中。。。。"); }}publicclassExample5_4{ publicstaticvoidmain(String[]args){ Studentstu1=newStudent("张三",18); stu1.study(); Studentstu2=newStudent("李四",20); stu2.study(); }}5.2.3构造方法说明:如果开发者没有为一个类定义任何构造方法,那么Java会自动为每个类创建一个默认的构造方法。这个默认的构造方法没有任何参数,在其方法体中也没有任何代码,即什么也不做。一旦为该类定义了构造方法,系统就不再提供默认的构造方法了。为了避免出现错误,在一个类中如果定义了有参的构造方法,最好再定义一个无参的构造方法。一般情况下,构造方法是用来在创建对象时为对象的属性赋初始值的。一个类中可以定义多个构造方法,这叫作构造方法的重载,在后文中会有详细的介绍。5.2.4this关键字Java提供了一个关键字this,它指代当前对象,可用于表示访问这个对象的成员。对例5-4定义的构造方法进行修改,代码如下:classStudent{ Stringname; intage; Student(Stringname,intage){ =name; this.age=age; }…//Student类的其他方法}5.2.4this关键字this这个关键字还有第二种用法。一个类中可以在一个构造方法中使用“this([参数1,参数2,…])”的形式来调用其他的构造方法。【例5-5】构造方法的调用。classStudent{ Stringname; intage; Student(Stringname){ =name; } Student(Stringname,intage){ this(name); this.age=age; } voidstudy(){ System.out.println(name+"同学

年龄"+age+"正在学习中。。。。"); }}publicclassExample5_5{ publicstaticvoidmain(String[]args){ Studentstu1=newStudent("张三"); stu1.study(); Studentstu2=newStudent("李四",20); stu2.study(); }}5.2.4this关键字在一个构造方法中使用this调用另一个构造方法时,需要注意以下几点。(1)不能在成员方法中使用this来调用构造方法。(2)在构造方法中,使用this调用另外一个构造方法的语句必须位于第一行,且只能出现一次。(3)不能在两个构造方法中使用this互相调用。5.2.5static关键字static是Java中的一个关键字或者修饰符,它表示静态,可用于修饰类中的成员变量、成员方法以及代码块。1.静态变量在Java中,可以通过static关键字来修饰类的成员变量,该变量称为静态变量。静态变量被该类所有的实例对象共享。在访问时,可以通过“对象名.静态变量名”的形式来访问,还可以通过“类名.静态变量名”的形式来访问。5.2.5static关键字【例5-6】静态变量的使用。classPerson{ staticStringcountry; }publicclassExample5_5{publicstaticvoidmain(String[]args){ Personp1=newPerson();p1.country="中国"; Personp2=newPerson();System.out.println(p2.country);Person.country="中华人民共和国"; System.out.println(p1.country);System.out.println(p2.country);}}5.2.5static关键字2.静态方法在实际开发中,有时希望在不创建对象的情况下就可以调用某个方法,换句话说,该方法不必和对象绑在一起。要达到这样的效果,只需要在类中定义的方法前加上static关键字即可,通常称这种方法为静态方法。同静态变量一样,静态方法可以使用“类名.静态方法名”的方式来访问,也可以通过“对象名.静态方法名”来访问。5.2.5static关键字【例5-7】静态方法的使用。classStudent{ staticvoidsayHello(){ System.out.println("你好!我是一名学生!");}}publicclassExample5_7{publicstaticvoidmain(String[]args){ Student.sayHello();Studentstu=newStudent();stu.sayHello();}}注意:静态方法中只能访问static修饰的成员。5.2.5static关键字3.静态代码块代码块就是用花括号将多行代码封装在一起,形成的独立代码区。用static关键字修饰的代码块叫作静态代码块。当类被加载时,静态代码块会执行。由于类只被加载一次,因此静态代码块只执行一次。5.2.5static关键字【例5-8】静态代码块的使用。classStudent{ Stringname; Student(Stringname){ =name; System.out.println("构造方法被调用了"); } voidstudy(){ System.out.println(name+"同学正在学习中。。。。"); } static{ System.out.println("初始化操作"); }}publicclassExample5_8{publicstaticvoidmain(String[]args){ Studentstu1=newStudent("张三"); stu1.study(); Studentstu2=newStudent("李四"); stu2.study(); }} 【任务描述】编写程序模拟两个村庄共用同一口井水。任意一个村庄都可以取用井里的水,也都可以查看井里的水量。【任务分析】1.通过任务描述可知,需要定义一个村庄类Village。2.Village类有一个成员变量num表示村庄的人数,一个成员变量waterAmount用于模拟井水的水量,该成员变量是静态的;还有一个方法setWaterAmount()用于设置井水的初始水量、一个方法lookWaterAmount()用于查看井水水量,这两个方法都是静态的,还有一个非静态方法drinkWater()用于表示该村庄的人取用水(喝水)。3.测试类中创建两个村庄,一个村庄改变了waterAmount的值,另一个村庄查看waterAmount的值。任务实践5-4共饮同井水5.2.6访问权限修饰符Java采用访问权限修饰符来控制类及类中成员的访问权限,分为以下4种级别:(1)private(类访问级别):如果类的成员被private访问权限修饰符修饰,那么这个成员只能被该类的其他成员访问,其他类无法直接访问。(2)default(包访问级别):如果一个类或者类的成员不使用任何访问权限修饰符修饰,那么称这个类的访问权限级别为默认访问权限级别(包访问级别),表示这个类或者类的成员只能被本包中的类访问。(3)protected(子类访问级别):如果一个类的成员被protected访问权限修饰符修饰,那么这个成员既能被同一包下的类访问,也能被不同包中该类的子类访问。(4)public(公共访问级别):如果一个类或者类的成员被public访问权限修饰符修饰,那么这个类或者类的成员能被所有的类访问,无论访问类与被访问类是否在同一个包中。5.2.6访问权限修饰符访问范围访问权限修饰符privatedefaultprotectedpublic同一类√√√√同一包中的类

√√√不同包中的子类

√√其他包中的类

√目录CONTENTS任务5.1面向对象的特征任务5.2类与对象任务5.3继承项目实施

助农超市购物程序项目实训

网上点餐系统目录CONTENTS任务5.3继承5.3.1继承的概念5.3.2方法的重写5.3.3super关键字继承在已经存在的类的基础上进行扩展,从而产生新的类。已经存在的类称为父类、基类或超类,而新产生的类称为子类或派生类。在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法。Java中子类继承父类的语法格式如下:修饰符classSubClassextendsSuperClass{//类的主体}5.3.1继承的概念5.3.1继承的概念【例5-9】继承的使用。classPet{Stringname;

voideat(){

System.out.println(name+"宠物吃东西");}}classDogextendsPet{

publicvoidprintName(){

System.out.println("name="+name);}}publicclassExample5_8{

publicstaticvoidmain(String[]args){Dogdog=newDog();

="小黑";

dog.printName();

dog.eat();

}}5.3.1继承的概念在类的继承中,需要注意一些问题,具体如下。(1)在Java中,类只支持单继承,不允许多重继承,也就是说,一个类只能有一个直接父类。(2)多个类可以继承一个父类。(3)在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类。(4)在Java中,子类和父类是一种相对概念,也就是说,一个类是某个类的父类的同时也可以是另一个类的子类。5.3.2方法的重写在继承关系中,子类会自动继承父类中定义的方法,但有时子类并不想原封不动地继承父类的方法,而想做一定的修改,这就需要对父类的方法进行重写。注意:(1)在子类中重写的方法需要和父类中被重写的方法具有相同的方法名、参数列表以及返回值类型。(2)子类在重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限。5.3.2方法的重写【例5-10】方法的重写。classPet{ voideat(){ System.out.println("宠物吃东西");}}classDogextendsPet{ voideat(){ System.out.println("狗吃骨头");}}publicclassExample5_9{ publicstaticvoidmain(String[]args){Dogdog=newDog(); dog.eat(); }}5.3.3super关键字当子类重写父类的方法后,子类对象将无法访问父类被重写的方法。为了解决这一问题,在Java中专门提供了一个super关键字。它可用于在子类中访问父类的成员(成员变量、成员方法和构造方法)。super关键字的用法如下:(1)super关键字可以用来引用父类的实例变量、调用父类方法(2)super()可以用来调用父类的构造方法。5.3.3super关键字【例5-10】super关键字的使用。classPet{

Stringname="宠物";

voideat(){

System.out.println("宠物吃东西");}}classDogextendsPet{

Stringname="犬类"; voideat(){

System.out.println("狗吃骨头");super.eat();

} voidprintName(){

System.out.println("name="+name); System.out.println("="+); }}publicclassExample5_10{

publicstaticvoidmain(String[]args){Dogdog=newDog();

dog.eat();

dog.printName();

}}5.3.3super关键字【例5-11】super关键字的使用。classPet{

publicPet(Stringname){

System.out.println("我是一只"+name);}}classDogextendsPet{

publicDog(){super("沙皮狗");

}}publicclassExample5_11{

publicstaticvoidmain(String[]args){Dogdog=newDog();

}}注意:通过super()调用父类构造方法的代码,必须位于子类构造方法体的第一行,且只能出现一次。5.3.3super关键字在例5-11中,如果将“super("沙皮狗");”这一行代码注释掉,程序编译后将报错,会提示“父类构造方法Pet()没有被定义,必须显式地调用另一个构造方法”。这里出错的原因是,在子类的构造方法中一定会调用父类的某个构造方法,可以在子类的构造方法中通过super()指定调用父类的哪个构造方法,如果没有指定,在子类的构造方法中会自动调用父类无参的构造方法。而在上面的代码中,因为定义了有参的构造方法“Pet(Stringname)”,而没有定义无参的构造方法Pet(),所以报错。为了解决上述程序的编译错误,可以在子类中调用父类已有的构造方法,当然也可以选择在父类中定义无参的构造方法。5.3.3super关键字【例5-12】在Pet类中定义无参构造方法classPet{

publicPet(){

System.out.println("我是一只宠物");} publicPet(Stringname){

System.out.println("我是一只"+name);}}classDogextendsPet{

publicDog(){super("沙皮狗");

}}publicclassExample5_12{

publicstaticvoidmain(String[]args){Dogdog=newDog();

}}【任务描述】在物流运输领域,卡车和火车是两种常见的运输方式,它们的计费方式也不同。下面列出了卡车和火车不同的计费方式:卡车:运费=重量x距离x120,当距离大于1000(km)或者重量大于60(t)的时候拒载。火车:当距离在900(km)内(包含900)时,运费=重量x距离X250,大于900(km)时,运费=重量x距离x300。【任务分析】1.通过任务描述可知,需要定义一个卡车类和火车类,卡车类中有属性:重量、距离,方法:计费,同样火车类中也有属性:重量、距离,方法:计费。考虑到这两个类之间的联系以及代码的重用性,可定义一个车类作为这两个类的父类。车类中具有的属性为重量和距离,具有方法为计费。2.定义子类卡车类、火车类,在这两个类中分别重写计费的方法。3.编写测试类,创建卡车和火车类对象,调用计算运费方法。任务实践5-5卡车与火车的运费目录CONTENTS任务5.1面向对象的特征任务5.2类与对象任务5.3继承项目实施助农超市购物程序项目实训

网上点餐系统项目实施项目分析本项目使用所学知识编写一个助农超市购物程序。购物时,如果购物者所要购买的农产品在超市中有,则提示购物者买到了某产品;如果超市中没有购物者所需要的农产品,则提示购物者白跑了一塌,在超市中什么都没有买到。1.通过任务的描述可知,此程序中包含了超市、农产品和购物者3个对象。既然是去购买农产品,那么可以先定义农产品对象,农产品对象需要有自己的名称属性。2.由于所有的农产品是在超市中卖的,所以还需要定义一个超市对象。每个超市都会有自己的名称和用于存放农产品的仓库。由于仓库中会有很多农产品,所以这里的仓库可以用数组表示,超市的主要功能是卖农产品,还要有个卖货的方法。3.由于购物者是人,所以还需要定义一个Person对象,该对象需要有名称属性,还要有一个购物的方法。4.最后编写测试类,在其main方法中,需要创建最后编写测试类,在其main方法中,需要创建商品对象、超市对象以及人,并使用这些对象中定义的方法实现购物程序对象、超市对象以及人,并使用这些对象中定义的方法实现购物程序。项目实施项目实施关键代码如下://定义超市类publicclassSupermarket{

。。。。。。 //2.定义货架数组 publicvoidsetProductArr(Product[]productArr){ ductArr=productArr; } //3.卖货方法 Productsell(Stringname){//传入要购买的农产品名称 for(inti=0;i<productArr.length;i++){//遍历农产品数组 if(productArr[i].getProductName()==name){ returnproductArr[i]; } } returnnull; }}项目实施项目实施关键代码如下://定义购物者类publicclassPerson{

。。。。。。 //2.购买方法 Productshopping(Supermarketmarket,Stringname){ returnmarket.sell(name); }}项目实施项目实施关键代码如下://测试类中部分代码 Productp1=newProduct("土豆"); Productp2=newProduct("玉米"); Productp3=newProduct("地瓜"); Productp4=newProduct("花生"); Productp5=newProduct("大白菜"); Productp6=newProduct("油菜"); Productp7=newProduct("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论