java程序设计任务式教程 课件 4-面向对象编程基础_第1页
java程序设计任务式教程 课件 4-面向对象编程基础_第2页
java程序设计任务式教程 课件 4-面向对象编程基础_第3页
java程序设计任务式教程 课件 4-面向对象编程基础_第4页
java程序设计任务式教程 课件 4-面向对象编程基础_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

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

文档简介

JaVa程序设计任务式教程01任务4-1在线课程管理系统-设计课程类02任务4-2在线课程管理系统-课程选课03任务4-3在线课程管理系统-课程信息封装应用目录CONTNETS单元四面向对象编程基础04任务4-3模拟银行理财存款单元目标能够创建和使用类与对象。能够编写构造方法并实现封装。能够实现类的继承和多态。能够编写异常处理的语句块捕获并处理异常。能够定义和使用抽象类和接口。能够使用包构建和管理项目结构和代码。培养学生的抽象思维能力。提高学生解决问题的能力。增强学生的代码组织和设计能力。知识目标能力目标素养目标学习目标理解面向对象编程的基本概念。掌握类的定义和对象的使用。学会构造方法的重载和封装的实现。了解继承和多态的实现机制。理解异常的概念,掌握异常处理的基本方法。理解抽象类和接口的定义及其使用。理解包的概念,掌握包构建项目的基本方法。01任务4-1在线课程管理系统-设计课程类什么是面向对象编程面向对象编程的优势面向对象编程的基本原则:封装、继承、多态类的定义成员变量与局部变量成员方法创建对象访问对象的属性和方法构造方法任务4-1在线课程管理系统-设计课程类-面向对象编程概述什么是面向对象编程面向对象编程(OOP)将数据和操作封装在一起的编程方法,通过对象和类来组织代码。比如需要编写一个车辆驾驶的程序。在面向过程编程中,需要编写一系列函数来控制车辆的操作:启动引擎()、加速()、刹车()等等。而在面向对象编程中,则需创建一个“小轿车”对象,使其拥有自己的属性(颜色、型号、速度)和方法(启动引擎、加速、刹车)。面向对象编程与面向过程对比面向对象编程将程序视为相互作用的“对象”的集合。关注的程序的功能是“谁来做”,即对象及其职责。提高代码重用性,更易维护和扩展。面向过程编程将程序视为一系列指令的集合,按顺序执行。关注的是程序的功能“如何做”,即步骤和流程。容易导致代码冗余,难以维护和扩展。任务4-1在线课程管理系统-设计课程类-面向对象编程概述面向对象编程的优势1.模块化和代码重用性2.代码可维护性和可扩展性:3.数据安全性和可靠性:4.更接近现实世界的建模:5.大规模项目的优势:任务4-1在线课程管理系统-设计课程类-面向对象编程概述面向对象编程的基本原则:封装、继承、多态封装(Encapsulation)封装是面向对象的核心思想,它指的是将数据和操作数据的方法组合在一起,隐藏内部实现细节,只暴露给外部有限的接口。这样,外部只能通过这些接口来访问和修改对象的状态,而不能直接访问和修改对象的内部数据。封装的目的是保护数据的完整性,防止外部直接干扰,确保对象的状态一致性。在Java中,通过将成员变量设置为私有(private)来实现封装,并提供公共(public)方法来访问和修改这些变量任务4-1在线课程管理系统-设计课程类-面向对象编程概述面向对象编程的基本原则:封装、继承、多态继承(Inheritance)继承是面向对象编程的一个重要特性,它允许我们定义一个新的类(子类)来继承另一个类(父类)的属性和方法。子类可以添加新的属性和方法,或者覆盖父类的方法。继承的目的是代码重用和扩展。通过继承,子类可以重用父类的代码,从而实现代码的复用。同时,子类可以根据需要添加新的属性和方法,或者覆盖父类的方法,从而实现代码的扩展。任务4-1在线课程管理系统-设计课程类-面向对象编程概述面向对象编程的基本原则:封装、继承、多态多态(Polymorphism)多态是面向对象编程的另一个重要特性,它允许我们使用一个接口或父类来引用其子类的对象。这意味着我们可以编写更通用的代码,它可以在不同的对象上工作,只要这些对象实现了相同的接口或继承了相同的父类。任务4-1在线课程管理系统-设计课程类-面向对象编程概述类与对象对象是面向对象程序设计的核心概念,即类和对象。我们放眼所及的物理实体均可以视为对象,楼宇、车辆、植物、行人等都可以看作是一个对象。其中,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。比如我们把所有能够进行产氧光合作用的生物都称为植物,可使用图例来抽象描述类与对象的关系植物作为一个统称,可看成为类,到了最底层节点可看作对象,从植物类别的关系便可以看出类与对象之间的关系。类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。从图4-1可以明显看出对象是根据类创建的,并且一个类可以对应多个对象任务4-1在线课程管理系统-设计课程类-面向对象编程概述类的定义创建对象,首先需要定义一个类。类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称作属性,成员方法用于描述对象的行为,可简称为方法。类的组成是由属性和行为两部分组成:属性:在类中通过成员变量来体现(类中方法外的变量)行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)定义类可分三步完成:定义类名编写类的成员变量编写类的成员方法任务4-1在线课程管理系统-设计课程类-面向对象编程概述类的定义类的定义的语法格式publicclass类名{ //成员变量

变量1的数据类型变量1;

变量2的数据类型变量2; … //成员方法

方法1;

方法2; }语法格式说明class前的public修饰符可以没有,也可以有多个,用来限定类的使用方式或范围。class是Java关键字,表明其后定义的是一个类。类名是用户为该类所起的名字,它应该是一个合法的标识符,并尽量遵从命名约定(如类名的第一个字母一般为大写)。Java类定义格式包括类声明和类主体两部分。类主体中的每个变量要声明其类型;方法不仅要进行声明,还要定义其实现。任务4-1在线课程管理系统-设计课程类-面向对象编程概述类的定义如例4-1,定义植物分类名和编号案例来学习如何定义类,publicclassplant{ Stringname; intnumber; voidcallback(){ System.out.println("分类名"+name+"分类编号"+number); }}上述案例中定义了一个植物分类。Plant是类名,name、number是成员变量,callback()是成员方法。成员方法和成员变量的使用方法后续讲解任务4-1在线课程管理系统-设计课程类-面向对象编程概述成员变量与局部变量成员变量(也称为实例变量或属性)是定义在类中的变量,它们用于存储类的状态或信息。每个类的实例(即类的对象)都可以有自己的成员变量值。类成员变量可以是基本数据类型(如int、double、boolean等)或引用类型(如String、ArrayList等)。类成员变量是类的组成部分,成员变量的定义语法格式如下:访问修饰符数据类型变量名类成员变量可以通过访问控制符来定义其访问权限,Java提供了以下访问控制符:public:公共访问权限,允许在任何地方访问。private:私有访问权限,只能在类内部访问。protected:受保护的访问权限,可以在同一个包内或子类中访问。默认(无修饰符):默认访问权限,可以在同一个包内访问。任务4-1在线课程管理系统-设计课程类-面向对象编程概述成员变量与局部变量局部变量仅作用在局部区域中,从定义开始到大括号或return结束,作用的范围结束时变量空间会自动释放,生命周期短。局部变量可以先定义再初始化,也可以定义的同时初始化,局部变量没有默认初始值,必须要初始化值后才能使用。成员变量和局部变量区别如表区别成员变量局部变量作用域整个类在其所属的方法、构造函数或代码块内存储位置堆内存栈内存生命周期与对象相同,当对象被销毁时才会释放仅限于其所属方法、构造函数或代码块的执行期间类中声明的位置类中方法外通常在方法中默认值有默认初始值(如int类型为0)没有默认初始值,必须初始化后才能使用任务4-1在线课程管理系统-设计课程类-面向对象编程概述成员变量与局部变量如例4-2,通过一个案例来学习如何定义成员变量和局部变量publicclassMyClass{ privateintmyInt;//私有整型变量

privateStringmyString;//私有字符串变量

publicdoublemyDouble;//公共双精度浮点变量

publicvoidmyMethod(){ intnum=10;//局部变量

System.out.println(num); }}上述代码中,定义了一个名为MyClass的类该类包含了三个成员变量,myInt、myString和myDouble;myInt、myString为类的私有变量,只能在MyClass类的内部被访问和修改;myDouble与前两个变量不同,它是公共变量,因此它不仅限于MyClass类的内部使用,可以在任何地方被访问和修改。在myMethod()方法中,定义了一个局部变量num,该变量只能在myMethod()方法使用。任务4-1在线课程管理系统-设计课程类-面向对象编程概述成员方法类成员方法是指在类内部定义的函数,用于执行操作。类成员方法可以返回值,也可以不返回值。它们是类的操作或行为的体现。方法名是方法的名称,用于标识这个方法。参数列表是指传递给方法的变量列表,它们用于接收传递给方法的值。方法体是方法执行的代码块,包含方法的具体操作。成员方法的返回类型是指方法执行后返回的值的类型,可以是基本数据类型或引用数据类型。类成员方法的定义语法格式如下访问修饰符数据类型变量名(//参数列表){ //局部变量

//方体体}任务4-1在线课程管理系统-设计课程类-面向对象编程概述成员方法类成员方法是指在类内部定义的函数,用于执行操作。类成员方法可以返回值,也可以不返回值。它们是类的操作或行为的体现。方法名是方法的名称,用于标识这个方法。参数列表是指传递给方法的变量列表,它们用于接收传递给方法的值。方法体是方法执行的代码块,包含方法的具体操作。成员方法的返回类型是指方法执行后返回的值的类型,可以是基本数据类型或引用数据类型。类成员方法的定义语法格式如下访问修饰符数据类型变量名(//参数列表){ //局部变量

//方体体}成员方法内部也可以定义变量,这个变量称之局部变量,局部变量在方法被执行时创建,在程序执行结束时被销毁,局部在使用时必须进行赋值操作或被初始化,否则会出现编译错误,类成员方法也可以通过访问控制符来定义其访问权限任务4-1在线课程管理系统-设计课程类-面向对象编程概述成员方法如例4-3,通过一个加法计算案例来学习如何使用成员方法publicclassCalculator{privateintresult;//私有变量,表示计算结果

//定义一个方法用于执行加法操作

publicvoidadd(intnum1,intnum2){result=num1+num2;//输出计算结果

System.out.println("计算结果为:"+result);}}上述代码中,result为类的私用变量,接收加法计算结果voidadd(intnum1,intnum2)为一个公共的成员方法实现加法计算并计算结果输出到输出到控制台。任务4-1在线课程管理系统-设计课程类-面向对象编程概述创建对象在Java程序中可以使用new关键字创建对象,可分为声明对象和实例化对象两步实现,具体格式如下:类名对象名称=null;对象名称=new类名();上述格式中,创建对象两步,也可以直接通过下面的方式创建对象,具体格式如下:类名对象名称=new类名();在Main函数中,使用new关键字创建Course对象publicclassMain{publicstaticvoidmain(String[]args){

Course

course1=newCourse(1,"Java编程基础","张老师",199.9);System.out.println(course1.getCourseInfo());}}任务4-1在线课程管理系统-设计课程类-面向对象编程概述访问对象的属性和方法在创建对象后,可以使用对象访问类中的某个属性或方法,对象属性和方法的访问通过“.”运算符实现,具体格式如下:对象名称.属性名对象名称.方法名上述语法格式中的“.”是成员运算符,它把对象名和成员名连接起来,指明是哪个对象的哪个成员。在所有的运算符中“.”运算符的优先级别最高。publicclassMain{publicstaticvoidmain(String[]args){

Course

course1=newCourse(1,"Java编程基础","张老师",199.9);System.out.println(course1.getCourseInfo());}}任务4-1在线课程管理系统-设计课程类-面向对象编程概述访问对象的属性和方法如例4-4案例,来学习如何访问对象的属性和方法,详见Student.java1 publicclassStudent{2 //成员变量3 Stringname;4 Stringsubject;5 //成员方法6 publicvoidstudy(){7 System.out.println(name+"学习的是Java程序设计课程。");8 }9 publicvoiddoSomething(){10 System.out.println(subject+"的阶段性成绩优秀。");11 }12 //访问学生13 publicstaticvoidmain(String[]args){14 //创建对象15 Students=newStudent();16 //使用对象17

="林*霞";18 s.subject="软件应用技术";19 System.out.println(+","+s.subject);20 s.study();21 s.doSomething();22 }23 }任务4-1在线课程管理系统-设计课程类-面向对象编程概述访问对象的属性和方法例4-4代码中,定义了两个类,Student类为实体类,共有2个字符型成员变量name、subject,用来描述的实体的属性和行为;Student为主类,其中包含一个main()方法,该方法创建了1个Student类对象,并打印出学习和成绩状态的学习信息。两个类可以分别存放在两个的源程序文件中,也可以存放在同一个文件。运行结果任务4-1在线课程管理系统-设计课程类-面向对象编程概述构造方法构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用,用于创建对象并初始化其成员变量。每个类都有至少一个构造函数,当使用new关键字创建一个类的实例时,Java虚拟机会调用相应的构造函数来为对象分配内存空间,并设置成员变量的初始值。构造函数的定义语法格式如下访问修饰符类名(//参数列表){//构造函数体}在一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法,具体如下:方法名与类名相同在方法名的前面没有返回值类型的声明构造方法可以被重载(即可以有多个构造方法,只要它们的参数列表不同)。在方法中不能使用return语句返回一个值,但是可以单独写return语句作为方法的结束。任务4-1在线课程管理系统-设计课程类-面向对象编程概述构造方法-无参构造方法不带任何参数的构造方法被称为无参构造方法。如果一个类没有显式地定义任何构造方法,那么编译器会自动为它提供一个无参构造方法。但是,一旦类中显式地定义了任何构造方法(无论是有参还是无参),编译器就不会再自动提供无参构造方法,如下例publicclassMyClass{privateintvalue;//无参构造方法

publicMyClass(){this.value=0;//初始化value为0}}任务4-1在线课程管理系统-设计课程类-面向对象编程概述构造方法-有参构造方法有参构造方法接受一个或多个参数,并在创建对象时用于初始化对象的状态。通过有参构造方法,可以在创建对象时直接设置其属性,而无需在创建后再进行额外的设置,如下例publicclassMyClass{privateintvalue;//有参构造方法

publicMyClass(intvalue){this.value=value;//使用传入的参数初始化value}}任务4-1在线课程管理系统-设计课程类-面向对象编程概述构造方法-构造方法重载Java中允许在一个类中定义多个构造方法,与普通方法一样,构造方法也可以重载,它们具有相同的名称(即类名)但不同的参数列表。在创建对象时,可以通过调用不同的构造方法来创建类的实例,为不同的属性进行赋值,如下例publicclassPerson{privateStringname;privateintage;//无参构造方法

publicPerson(){="Unknown";this.age=0;}

//带一个参数的构造方法

publicPerson(Stringname){=name;this.age=0;//或者设置为某个默认值

}

//带两个参数的构造方法

publicPerson(Stringname,intage){=name;this.age=age;}

//其他方法和属性...}任务4-1在线课程管理系统-设计课程类-面向对象编程概述构造方法-构造方法重载如例4-5,通过一个算术计算案例来演示如何在类中定义构造方法的使用,详见Calculator.java1 publicclassCalculator{2 //定义成员变量用于存储加法和减法的结果3 privateintsum;4 privateintdifference;5 6 //构造函数,用于创建Calculator对象时初始化属性7 publicCalculator(intnum1,intnum2){8 //计算加法结果9 sum=num1+num2;10 //计算减法结果11 difference=num1-num2;12 //输出计算结果13 System.out.println("加法结果:"+sum);14 System.out.println("减法结果:"+difference);15 }16 //主方法,用于测试Calculator类17 publicstaticvoidmain(String[]args){18 //创建Calculator对象19 Calculatorcalculator=newCalculator(5,3);20 }21 }上述代码中,Calculator类定义了两个私有成员变量sum和difference,分别用于存储加法和减法的结果。并定义了一个构造函数,它接受两个整数参数num1和num2,并在构造函数中执行加法和减法计算,然后输出到控制台。其运行结果任务4-1在线课程管理系统-设计课程类-任务实现1.创建OnlineCourse类,声明包含课程课程名、教师、时长、价格等信息的成员变量。2.定义无参构造方法,初始化默认课程信息,定义有参构造方法,使用参数初始化课程信息。3.定义displayCourseInfo()方法,输出课程信息。4.在main方法中创建OnlineCourse对象。5.使用无参构造方法和有参构造方法创建OnlineCourse对象,调用displayCourseInfo()方法输出课程信息。代码参考教材中的OnlineCourse.java任务4-1在线课程管理系统-设计课程类-任务实现在上述代码中,使用面向对象编程的方式,通过OnlineCourse类封装课程信息,并使用的构造方法和成员方法,创建和管理课程信息。最后通过displayCourseInfo()方法将课程信息输出到控制台。运行结果如图02任务4-2在线课程管理系统-课程选课引用成员变量

调用成员方法调用构造方法静态变量

静态方法静态代码块任务4-2在线课程管理系统-课程选课-this关键字this关键字在Java中总是引用当前对象。在类的内部可以使用this作前缀引用成员变量、调用成员方法和构造方法,以便分辨成员变量与局部变量Java中的this关键字主要作用主要有以下3种。使用this关键字调用本类中的属性。this关键字调用成员方法。使用this关键字调用本类的构造方法。任务4-2在线课程管理系统-课程选课-this关键字引用成员变量方法中定义和成员变量同名的变量时,为了区分成员变量和局部变量,在成员变量前加上前缀this调用被隐藏的成员变量。其语法格式如下:this.成员变量名调用成员方法在一个类的方法中调用另一个方法时,可以使用this来引用当前对象,其语法格式如下:this.成员方法名(参数列表)调用构造方法在一个构造方法中调用另一个构造方法,以减少代码重复和提高代码的可读性,其语法格式如下:this.构造方法名(参数列表)任务4-2在线课程管理系统-课程选课-this关键字this关键字调用构造方法时:在构造方法中使用this关键字时,必须作为构造方法的第一条语句。只能在构造方法中使用this关键字来调用所在类中的其它构造方法。只能使用this关键字调用其它构造方法,而不能使用方法名直接调用构造方法。任务4-2在线课程管理系统-课程选课-this关键字如例4-6,演示this关键字使用方法,详见ThisPersonDemo.java1 publicclassThisPersonDemo{2 //实例变量3 privateStringname;4 privateintage;5 6 //构造方法17 publicThisPersonDemo(Stringname,intage){8 //使用this调用另一个构造方法9 this(name);10 //设置age11 this.age=age;12 }13 14 //构造方法215 publicThisPersonDemo(Stringname){16 //使用this引用实例变量name17 =name;

//这里不设置age,//因为只有一个参数的构造方法通常用于部分初始化19 }20 21 //成员方法22 publicvoidintroduce(){23 //使用this引用实例变量name和age24 System.out.println("姓名:"++"年龄:"+this.age);25 }26 27 //另一个成员方法,用于修改name28 publicvoidsetName(StringnewName){29 //使用this引用实例变量name并修改它30 =newName;31 }32 publicstaticvoidmain(String[]args){33 //创建Person对象,使用两个参数的构造方法34 ThisPersonDemoperson=newThisPersonDemo("章*敏",30);35 //调用introduce方法36 roduce();37 //修改name并再次调用introduce方法38 person.setName("张*敏");39 roduce();40 }41 }任务4-2在线课程管理系统-课程选课-this关键字如例4-6代码中,它有两个实例变量:name和age;两个构造方法,一个接收两个参数(name和age),另一个只接收一个参数(name);在接收两个参数的构造方法中,我们使用this(name)来调用接收一个参数的构造;方法在introduce方法中,我们使用和this.age来引用实例变量,并打印出自我介绍;在setName方法中,我们使用来引用实例变量并修改它;在main方法中,我们创建了一个Person对象,并调用了它的方法,以演示this关键字在类中的使用,其运行结果任务4-2在线课程管理系统-课程选课-static关键字static关键字用于修饰类的成员,如成员变量、成员方法以及代码块,使其属于类本身,而不是类的实例。被static修改的成员具备一些特殊性,这意味着静态成员可以在不创建类的实例的情况下被访问,并且所有类的实例共享相同的静态成员任务4-2在线课程管理系统-课程选课-static关键字静态变量(StaticFields)是类级别的变量,它们属于类本身,而不是类的实例。所有类的实例共享同一个静态变量。定义:使用static关键字定义的变量称为静态变量。访问:静态变量可以通过类名直接访问,而不需要创建类的实例。初始化:静态变量在类加载时被初始化,它们在程序运行期间一直存在。内存分配:静态变量在方法区中分配内存,而不是在堆中。静态变量可以使用“类名.变量名”的形式来访问静态变量任务4-2在线课程管理系统-课程选课-static关键字如例4-7,演示静态变量使用方法,详见StaticvarCourse.java静态变量1 publicclassStaticvarCourse{3 publicStringcourseName;4 publicdoubleprice;5 publicstaticintcourseCount=0;//静态变量,用于跟踪课程数量 7 publicStaticvarCourse(StringcourseName,doubleprice){8 this.courseName=courseName;9 this.price=price;10 courseCount++;//每次创建对象时,课程数量增加11 }13 publicstaticvoidmain(String[]args){14 StaticvarCoursecs=newStaticvarCourse("java",25);15 StaticvarCoursecs2=newStaticvarCourse("java",25);16 System.out.println("创建了"+courseCount+"个NewCourse对象。");17 }19 }任务4-2在线课程管理系统-课程选课-static关键字如例4-7代码定义了一个Course类,包含三个属性:courseName、price和一个静态变量courseCount,用来跟踪创建的课程数量。每次创建Course类的实例时,构造函数都会被调用,courseCount会递增,其运行结果静态变量任务4-2在线课程管理系统-课程选课-static关键字在实际开发时,如需要在不创建对象的情况下就可以使用某个方法,即可static关键字修饰该类,通常称这种方法为静态方法。静态方法也称为类方法,它属于类本身,而不是类的任何实例。静态方法不能访问实例变量,因为它不与任何特定实例相关联。静态方法可以通过类名直接调用,无需创建类的实例。同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例使用对象来访问静态方法静态方法任务4-2在线课程管理系统-课程选课-static关键字静态方法如例4-8,演示静态方法使用方法,详见StaticmothCourse.java1 publicclassStaticmothCourse{2 publicStringcourseName;3 publicdoubleprice;4 publicstaticintcourseCount=0;//静态变量,用于跟踪课程数量5 publicStaticmothCourse(StringcourseName,doubleprice){6 this.courseName=courseName;7 this.price=price;8 courseCount++;//每次创建对象时,课程数量增加9 }10 //静态方法11 publicstaticvoidprintCount(){12 System.out.println("创建了"+courseCount+"个NewCourse对象。");13 }14 publicstaticvoidmain(String[]args){15 StaticmothCoursecs=newStaticmothCourse("java",25);16 StaticmothCoursecs2=newStaticmothCourse("java",25);17 StaticmothCourse.printCount();18 }19 }任务4-2在线课程管理系统-课程选课-static关键字如例4-8代码包含一个静态变量courseCount和一个静态方法printCount()。printCount()用于打印创建的Course对象的数量。由于courseCount是一个静态变量,它被所有Course对象共享,因此无论创建多少个Course对象,courseCount的值都会增加,其运行结果如图静态方法任务4-2在线课程管理系统-课程选课-static关键字在Java类中,使用一对大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块。当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次。静态代码块在类加载时执行,且只执行一次。静态代码块通常用于初始化静态变量或执行其他一次性操作。静态代码块任务4-2在线课程管理系统-课程选课-static关键字静态代码块如例4-9,使用对象来访问静态代码块的使用方法,详见StaticblockCOurse.java1 publicclassStaticblockCOurse{2 privateStringname;3 privatedoubleprice;4 //课程总数,使用static关键字修饰,属于类变量5 privatestaticinttotalCourses;6 //静态代码块,在类加载时执行一次,用于初始化课程总数7 static{8 System.out.println("初始化课程系统...");9 totalCourses=0;10 }11 //构造函数,创建课程对象时,课程总数递增12 publicStaticblockCOurse(Stringname,doubleprice){13 =name;14 this.price=price;15 totalCourses++;16 }17 publicstaticintgetTotalCourses(){18 returntotalCourses;19 }20 publicstaticvoidmain(String[]args){21 StaticblockCOursecourse1=newStaticblockCOurse("Java",99);22 StaticblockCOursecourse2=newStaticblockCOurse("Python",120);23 StaticblockCOursecourse3=newStaticblockCOurse("Web",799);24 System.out.println("总课程数:"+StaticblockCOurse.getTotalCourses());25 }26 }任务4-2在线课程管理系统-课程选课-static关键字如例4-9代码中,静态代码块static{...}代码块在StaticblockCOurse类加载时执行一次,用于初始化totalCourses变量为0,并输出"初始化课程系统..."信息。构造函数和getTotalCourses()方法,与之前代码相同,构造函数用于创建课程对象,并在每次创建时递增totalCourses计数。getTotalCourses()方法用于获取当前所有课程信息和课程总数,其运行结果如图静态代码块任务4-2在线课程管理系统-课程选课-任务实现1.在主类中使用while、for循环实现主菜单和显示课程列表功能,允许用户多次执行选课系统的操作,使用switch语句处理用户的选择,根据不同的选项调用相应的功能。2.定义课程类,包含了课程的名称(name)、授课教师(teacher)和价格(price),和获取课程信息的方法(getCourseInfo),用于在课程列表和购物车中显示课程信息。3.定义购物车类,购物车使用单例模式,应用程序中只有一个购物车实例并限定购车中课程总量;使用数组和变量实现用户选择课程并记录课程数量和总价;4.添加课程到购物车,根据所选择课程列表中课程编号,将课程编信息添加都购物车中。5.显示购物车,打印购物车中已选课程信息。6.结算,打印购车中的课程清单,并清空购物车。代码参考教材中的CourseCart.java任务4-2在线课程管理系统-课程选课-任务实现案例代码中主要包括三个类:Course、ShoppingCart和CourseCart。Course类,表示课程信息,包括课程名、授课教师和价格等属性,以及获取这些属性的方法;ShoppingCart类,表示购物车,使用单例模式实现,确保整个程序中只有一个购物车实例。购物车中可以存储最多3门课程,提供添加课程、显示购物车内容和结算等功能;CourseCart主类,首先创建一组课程信息,然后创建一个购物车实例和购物车主菜单及主菜单的操作功能处理。其运行结果03任务4-3在线课程管理系统-课程信息封装应用封装的概念封装实现和访问控制任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制封装(Encapsulation)是面向对象编程(OOP)的核心概念之一,它指的是将数据(属性)和方法(行为)封装在一起,使得外部无法直接访问和修改对象的内部状态。在Java中,封装是通过访问控制符来实现的,它将类成员的访问权限控制在一定的范围内。封装的作用主要体现在以下几个方面:提高代码的安全性:通过封装,可以防止外部直接访问和修改对象的内部状态,从而保护数据的安全性和完整性。提高代码的可维护性:封装使得代码的组织更加清晰,便于理解和维护。提高代码的可扩展性:封装使得类的设计更加模块化,方便后续的扩展和修改。封装的概念任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制所谓类的封装是指在定义一个类时,使用private关键字对类中的属性进行私有化修饰,私有属性只能在其所在类中被访问,如果外界想要访问私有属性,需要设计一个或多个使用public修饰的公有方法,其中包括用于获取属性值的getter方法和设置属性值的setter方法。类的封装任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制类的成员除了属性、方法、代码块外,还可以有内部类。内部类也就是定义在类中的类,与类的属性、方法和代码快同等级。相对内部类,定义该内部类的类称为外部类。它与外部类关联,可以访问外部类的成员。内部类可以提高代码的封装性和组织性,通常用于实现封装和隐藏实现细节。创建内部类对象的语法格式如下:外部类名.内部类名引用变量名=new外部类名().new内部类名()内部类和外部类任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制内部类分为几种类型:成员内部类:定义在外部类的成员位置,成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。静态内部类:定义在外部类的静态成员位置。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。匿名内部类:没有名字的内部类,通常用于实现接口或继承抽象类。局部内部类:定义在方法内部。成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内内部类和外部类任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制如例4-10,封装访问的基本用法,详见OuterClass.java内部类和外部类1 publicclassOuterClass{2 privateintprice=257;//外部类的私有成员3 publicclassInnerClass{4 //内部类的方法可以直接访问外部类的成员5 voidaccessOuterField(){6 System.out.println("内部类访问外部类的私有成员:"+price);7 }8 }9 publicstaticvoidmain(String[]args){10 OuterClassouter=newOuterClass();//创建外部类对象11 //创建内部类对象12 OuterClass.InnerClassinner=outer.newInnerClass();13 inner.accessOuterField();//调用内部类方法访问外部类私有成员14 }15 }任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制通过访问控制符来限制外部对类成员的直接访问,从而保护数据的安全性和完整性。以下是封装实现的基本操作方法和步骤:1.使用访问控制符2.定义私有成员变量3.提供公共的getter和setter方法4.封装内部实现细节5.构造方法初始化封装实现任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制1.使用访问控制符使用访问控制符(public、private、protected)来控制类成员的访问权限。public:允许在任何地方访问。private:只能在类内部访问。protected:可以在同一个包内或子类中访问。2.定义私有成员变量在类内部,将属性声明为私有(private),以限制外部对它们的直接访问。privateintage;privateStringname;封装实现任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制3.提供公共的getter和setter方法为了允许外部访问和修改私有成员变量的值,需要提供公共的getter和setter方法。封装实现publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}任务4-3在线课程管理系统-课程信息封装应用-封装和访问控制4.封装内部实现细节如果类中包含内部实现细节,可以将这些细节封装在一个内部类中,以提高代码的模块性和可维护性。privateclassInternalClass{//内部类成员变量和方法}5.构造方法初始化在构造方法中初始化私有成员变量的值,确保对象创建时具有初始状态。publicMyClass(intage,Stringname){this.age=age;=name;}封装实现1.创建外部类和外部类构造方法,定义一个名为OnlineCourse的外部类,用于存储课程信息和初始化课程信息及获取和设置课程名、教师名和价格的公共方法。2.定义私有属性,在OnlineCourse类中定义三个私有属性:课程名、教师名和价格。3.创建内部类,在OnlineCourse类内部,定义一个名为CourseEvaluation的内部类和构造方法,用于存储课程评价信息和初始化评价信息。4.内部类方法:在CourseEvaluation类定义两个方法:getEvaluation()和setEvaluation(),分别用于获取和设置评价信息。其中getEvaluation()返回一个新的CourseEvaluation对象,setEvaluation()方法只允许设置好评。。5.在main方法中,创建一个OnlineCourse对象,使用封装、内部类和外部类的基本操作修改教师姓名和课程价格,并在控制台打印修改后的信息。代码参考教材中的OnlineCoursePacking.java任务4-3在线课程管理系统-课程信息封装应用-任务实现案例代码中,通过外部类OnlineCourse,我们可以存储和管理在线课程的信息。内部类CourseEvaluation用于存储课程评价信息,并提供了获取和设置评价信息的方法。主方法main用于创建OnlineCourse对象,并演示了如何使用这些方法来获取和修改课程信息,其运行结果任务4-3在线课程管理系统-课程信息封装应用-任务实现04任务4-4模拟银行理财存款继承的机制super关键字方法重写final关键字抽象类接口异常类异常处理机制自定义异常创建包package关键字import关键字包的访问控制任务4-4模拟银行理财存款-继承Java中,继承是根据现有类创建新的类,由继承而得到的新类称为子类或派生类,被继承的类称为父类或者基类。Java是单继承,也就是只有一个父类,系统默认该类继承Object类。也就是Java中所有的类都是Object类的子类。类继承语法格式如下:修饰符class子类名extends父类名{

类成员;}继承的机制任务4-4模拟银行理财存款-继承运用Java继承机制来改进任务4-4中的OnlineCourse类,定义一个新的VIPCourse类,代码如下继承的机制publicclassVIPCourseextendsOnlineCourse{privateStringextraBenefit;//VIP课程的额外福利

//构造方法:初始化VIP课程信息

publicVIPCourse(StringcourseName,StringteacherName,doubleprice,StringextraBenefit){super(courseName,teacherName,price);//调用父类的构造方法

this.extraBenefit=extraBenefit;}//.....其他}VIPCourse是OnlineCourse的一个子类,它继承了OnlineCourse的所有属性和方法。VIPCourse引入了新的私有属性extraBenefit来表示VIP课程的额外福利。VIPCourse有自己的构造函数,用于初始化其特有的属性以及从父类继承来的属性。构造函数通过调用父类的构造函数super(courseName,teacherName,price)来确保所有从OnlineCourse继承的属性也被正确地初始化。任务4-4模拟银行理财存款-继承super关键字用于访问父类的成员,包括构造方法、方法和变量。当子类继承父类时,super关键字是用来调用父类的构造方法、方法和变量的。在上一小节中的OnlineCourse类的构造函数中使用super调用父类的构造方法super关键字主要有以下两种用途。调用父类的构造器:super(参数);访问隐藏的成员:super.属性名; super.方法名();super关键字任务4-4模拟银行理财存款-继承this和super关键字两者的区别如表super关键字

this关键字Super关键字成员变量访问本类中的成员变量,如果没有则从父类中继续查找直接访问父类中的成员变量构造方法调用本类的构造方法,必须放在构造方法的首行调用父类的构造方法,必须放在子类构造方法的首行成员方法访问本类中的成员方法,如果没有则从父类中继续查找直接访问父类中的成员方法任务4-4模拟银行理财存款-继承如例4-11,以OnlineCourse类为基础,使用super关键字定义VIP课程示例,详见VIPOnlineCourse.javasuper关键字1 publicclassVIPOnlineCourseextendsOnlineCourse{2 //有参构造方法3 publicVIPOnlineCourse(Stringname,Stringteacher,intduration,doubleprice){4 super(name,teacher,duration,price);5 }6 //输出课程信息7 @Override8 publicvoiddisplayCourseInfo(){9 super.displayCourseInfo();10 }11 publicstaticvoidmain(String[]args){12 //使用有参构造方法创建VIPCourse对象13 VIPOnlineCoursevipCourse=newVIPOnlineCourse("Java微服务应用开发","李老师",240,199.0);14 vipCourse.displayCourseInfo();15 }16 }任务4-4模拟银行理财存款-继承在上述的代码中,定义一个名为VIPCourse的类,该类继承自OnlineCourse类。使用super关键字调用了父类OnlineCourse的构造方法,以便在创建VIPCourse对象时可以设置课程名称、讲师姓名、课程时长和课程价格。通过这种方式,我们实现了VIP课程对普通课程的继承,并且可以在子类中添加新的属性和方法。其运行结果如图super关键字任务4-4模拟银行理财存款-继承在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。方法重写(Override)要求子类的方法类型与父类方法类型相同或者是父类子类型,并且该方法的名字、参数与父类相同。子类中重写父类中的方法,相当于替换掉了父类的方法,在子类中不增加方法。子类可以通过方法重写来改进继承来的方法,以便满足自己的要求。使用方法重写时应该注意以下事项:子类不能重写父类的final方法;子类不能重写父类的私有方法;子类重写的方法必须具有相同的访问权限或更宽松的访问权限。方法重写任务4-4模拟银行理财存款-继承方法重写如例4-12,以OnlineCourse类为基础,重写父类的方式重写VIP课程好评,详见VIPCourseOverride.java1 publicclassVIPCourseOverrideextendsOnlineCourse{2 Stringevaluation;3 doublevipPrice;4 //有参构造方法5 publicVIPCourseOverride(Stringname,Stringteacher,intduration,doubleprice,Stringevaluation,doublevipPrice){6 super(name,teacher,duration,price);7 this.evaluation=evaluation;8 this.vipPrice=vipPrice;9 }10 //输出课程信息11 @Override12 publicvoiddisplayCourseInfo(){13 super.displayCourseInfo();14 System.out.println("课程评价:"+evaluation);15 System.out.println("VIP会员价格:"+vipPrice+"元");16 }17 publicstaticvoidmain(String[]args){18 //使用有参构造方法创建VIPCourseOverride对象19 VIPCourseOverridevipCourse=newVIPCourseOverride("Python数据分析","王老师",340,210.0,"非常好",180.0);20 vipCourse.displayCourseInfo();21 }22 }任务4-4模拟银行理财存款-继承方法重写在上述的例子中,在上述的代码中,定义VIPCourseOverride类,该类继承自OnlineCourse类。并在VIPCourseOverride类的重写了构造方法,增加课程评价(String类型)和会员价格(double类型)参数,最后重写课程信息显示方法displayCourseInfo(),显示修改后的VIP课程信息。其运行结果如图任务4-4模拟银行理财存款-继承在Java中,final关键字用于限定类、方法和变量,以实现不可变性和限制继承,因此被final修饰的类、变量和方法将具有以下特性:final修饰的类不能被继承。其语法格式如下:finalclassFinalClass{//类体}final修饰的方法不能被子类重写。其语法格式如下:publicfinalvoidfinalMethod(){//方法体}final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。其语法格式如下:finalintfinalVariable=10;final关键字任务4-4模拟银行理财存款-继承final关键字的一些常用应用场景类不可变类:如果一个类不需要被继承,那么可以将其声明为final。这样可以确保该类的实现细节不会被修改,提高代码的安全性和稳定性。内部类:如果一个内部类不需要被外部类之外的代码使用,可以将其声明为final,以避免外部代码意外地继承或修改内部类的实现。辅助类:如果一个类只包含静态方法和静态变量,并且不需要被继承,可以将其声明为final,以提高代码的可读性和维护性。final关键字任务4-4模拟银行理财存款-继承final关键字的一些常用应用场景方法私有方法:如果一个方法是私有的,并且不需要被重写,可以将其声明为final,以避免子类意外地覆盖这个方法。工具方法:如果一个方法是工具类中的静态方法,并且不需要被重写,可以将其声明为final,以提高代码的可读性和维护性。效率考虑:在某些情况下,如果重写方法会导致性能问题,可以将其声明为final,以避免子类无意中重写这个方法。final关键字任务4-4模拟银行理财存款-继承final关键字的一些常用应用场景变量常量:如果一个变量在程序运行期间不会改变,可以将其声明为final,以提高代码的可读性和维护性。不可变对象:如果一个对象在创建后不会改变,可以将其声明为final,以提高代码的安全性和稳定性。避免修改:在某些情况下,如果变量在程序运行期间不应该被修改,可以将其声明为final,以提高代码的安全性和稳定性。final关键字任务4-4模拟银行理财存款-继承如例4-13,使用final定义一个特价课程的课程信息,详见FinalCourse.java1 publicfinalclassFinalCourse{2 privatefinalStringname;3 privatefinalStringteacher;4 privatefinalintduration;5 privatefinaldoubleprice;6 privatefinaldoublespecialPrice;7 8 //有参构造方法9 publicFinalCourse(Stringname,Stringteacher,intduration,doubleprice,doublespecialPrice){10 =name;11 this.teacher=teacher;12 this.duration=duration;13 this.price=price;14 this.specialPrice=specialPrice;}……final关键字任务4-4模拟银行理财存款-继承上述代码中,FinalCourse类被final关键字修饰,这意味着它不能被继承。FinalCourse类包含了一个final关键字修饰的specialPrice变量,表示特价课程的价格是不可变的,其运行结果如图final关键字任务4-4模拟银行理财存款-多态Java中提供了abstract关键字表示抽象。抽象类(AbstractClass)是Java中用于定义一组抽象方法的类,这些方法没有具体的实现。抽象类不能被实例化,只能被继承。子类必须实现抽象类中定义的所有抽象方法,否则子类也必须声明为抽象类。实现抽象类的语法格式具体示例如下://用abstract修饰抽象类abstractclassParent{ //abstract修饰抽象方法,只有声明,没有实现

publicabstractvoidcallback();}抽象类抽象类中可以有抽象方法和非抽象方法,抽象类不能用new关键字来构造对象。抽象类的子类可以重写父类的抽象方法,也可以继承该抽象方法。抽象类,只关心操作,即方法名字、类型和参数,不关心操作具体是怎么实现的。抽象类是在抽象层次上考虑类的问题,表明方法的重要性。任务4-4模拟银行理财存款-多态抽象类的定义与使用规则如下:包含一个以上抽象方法的类必须是抽象类。抽象类和抽象方法都要使用abstract关键字声明。抽象方法只需声明而不需要实现。如果一个类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法。抽象类任务4-4模拟银行理财存款-多态在学习多态操作时,涉及到将子类对象当作父类类型使用的情况,该类情况称之为“向上转型”,其语法格式为:父类类型对象名=new子类类型()将子类对象当作父类使用时不需要任何显式地声明,单此时不能通过父类变量去调用子类中的特有方法。将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的方法,此时,将父类引用再还原为子类对象即可,该类情况称之为“向下转型”。在实际应用开发中,向上转型转换通常是无害的,而向下转型因为安全级别低使用比较少,如果出现转换失败,程序运行时就会抛出异常。Java中为了提高向下转型的安全性,引入了instanceof,如果该表达式为true,则可以安全转换。抽象类-向上、向下转型任务4-4模拟银行理财存款-多态如例4-14,利用教师和学生的主要工作为例实现抽象类,详见AbstractPerson.java抽象类1 publicclassAbstractPerson{2 publicstaticvoidmain(Stringargs[]){3 Teachersteacher=newTeachers(

温馨提示

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

评论

0/150

提交评论