第章面向对象编程基础课件_第1页
第章面向对象编程基础课件_第2页
第章面向对象编程基础课件_第3页
第章面向对象编程基础课件_第4页
第章面向对象编程基础课件_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

《Java语言程序设计(一)》串讲主讲人:面向对象编程基础本部分重点JAVA语言的类对象继承多态接口JAVA小应用程序基础世界是由什么组成的?

名胜人

物品

动物,植物……

面向对象编程基础对象的特征——属性属性——对象具有的各种特征每个对象的每个属性都拥有特定值例如:王小红和朱小雨的体重不一样60kg王小红属性35岁收银员小王对象的特征——方法方法——对象执行的操作

打单

收银方法刷卡收银员王小红封装对象同时具有属性和方法两项特性对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割谁看见过只有“完好的零件和颜色”而不能开动的汽车?类:从对象抽取出类顾客类轿车类

…………

类是模子,确定对象将会拥有的特征(属性)和行为(方法)类是对象的类型不同于int类型:具有方法

各种口味的球状冰淇淋

球状冰淇淋模子类和对象有什么区别呢?类是抽象的概念,仅仅是模板,比如说:“人”对象是一个你能够看得到、摸得着的具体实体,比如:“小布什”小布什普京克林顿……“人”类特征(属性)年龄体重行为(方法)衣食住行Java是面向对象的语言

所有Java程序都以类class为组织单元关键字class定义自定义的数据类型

publicclassHelloWorld{publicstaticvoidmain(String[]args){

System.out.println("使用Java语言理解程序逻辑");…}}Java类模板类将现实世界中的概念模拟到计算机程序中publicclass类名{//定义属性部分属性1的类型属性1;

属性2的类型属性2;…

属性n的类型属性n;//定义方法部分方法1;

方法2;…

方法m;}定义类定义一个类的步骤1、定义类名2、编写类的属性3、编写类的方法常见错误publicclass.Book{StringbookName;StringauthorName;intpageNum;booleanisAvailable;}类命名规则:1、不能使用Java关键字2、首字母可以为字母,也可以是“_”或“$”(建议不要这样)3、不能包含空格或“.”号代码错误如何创建和使用对象使用对象的步骤:使用new创建类的一个对象使用对象:使用“.”进行以下操作给类的属性赋值:对象名.属性调用类的方法:对象名.方法名()Schoolcenter=newSchool();center.schoolName=“北京大学";//给属性赋值center.toString();//调用类的方法,该方法中的操作将被执行面向对象(OO)的优点便于程序模拟现实世界中的实体用“类”表示实体的特征和行为隐藏细节对象的行为和属性被封装在类中,外界通过调用类的方法来获得,不需关注内部细节如何实现可重用可以通过类的模板,创建多个类的对象数据类型总结intdoublechar

String使用class定义的类型StudentTeacherSchool……基本数据类型引用数据类型数据类型使用区别数据类型特征声明使用基本数据类型没有方法inti=8;i++;引用数据类型具有方法Studentstu=

newStudent();stu.age++;类的方法写出狮子对象的“跑”方法写出狮子对象的“叫”方法

电动玩具狮子属性:颜色:黄色行为:跑叫按此按钮,狮子开始跑如何定义类的方法类的方法定义类的某种行为(或功能)

方法的定义

方法的名称

方法的主体

方法返回的数据类型定义类的方法public返回值类型方法名(){//这里编写方法的主体}步骤一:定义方法名以及返回值步骤二:编写方法体方法的命名如何给方法起名字?必须以字母、‘_’或‘$’开头可以包括数字,但不能以它开头遵循的命名规范通常方法名是一个动词,如果有两个以上单词组成,第一个单词的首字母小写,其后单词首字母大写方法的返回值两种情况如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型如果方法没有返回值,返回类型为voidpublicclassStudent{Stringname="张三";publicvoidgetName(){returnname;}……}返回类型要匹配return表达式;编译错误常见错误publicclassSchool{……publicstaticvoidmain(String[]args){……return“北京大学!";}}返回类型是void方法中不能有返回值常见错误publicclassStudent{publicdoublegetInfo(){doubleweight=95.5;doubleheight=1.69;returnweight,height;}}方法至多可以返回一个值,不能返回多个值方法调用方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果方法调用:执行方法中包含的语句

对象名.方法名();方法调用小结方法之间允许相互调用,不需要知道方法的具体实现,提高了效率

情况举例1、类Student的方法a()调用Student类的方法b(),直接调用publicvoida(){b();//调用b()}2、类Student的方法a()调用类Teacher的方法b(),先创建类对象,然后使用“.”调用publicvoida(){Teachert=newTeacher();t.b();//调用Teacher类的b()}变量作用域变量声明的位置决定变量作用域变量作用域确定可在程序中按变量名访问该变量的区域…for(inti=0,a=0;i<4;i++){a++;}System.out.println(a);…a的作用域仅在for循环中代码错误变量作用域变量1类型变量1;变量2类型变量2;变量3类型变量3;public返回类型方法1(){

变量4类型变量4;}public返回类型方法2(){

变量5类型变量5;}publicclassAutoLion{}AutoLion类的方法别的类的方法

谁能使用这些变量?方法1方法2成员变量局部变量局部变量面向对象的编程思维publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.print("请输入Java成绩:");intjava=input.nextInt();……/*计算并显示输出*/inttotal=java+c+db;doubleavg=total/3;System.out.print("总成绩:"+total);System.out.print("\n平均分:"+avg);}一次还可以接受,如果还要再执行这个功能,难道还要重复再写?calcDiffTimecalcTotalScore()ScoreCalcshowTotalScore()calcAvg()showAvg()main(){//程序入口

//计算并输出总成绩

//计算并输出平均分

}Test调用调用类的方法实现某个特定的功能,别的类不需要知道它如何实现!知道了实现此功能的类和它的方法名,就可以直接调用了,不用重复写代码!面向对象(OO)思想什么是封装publicclassTeacher2{privateStringname;//教员姓名//返回教员姓名publicStringgetName(){returnname;}//设定教员姓名publicvoidsetName(Stringname){=name;}}

封装,就是隐藏实现细节将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性Teacher2teacher=newTeacher2();teacher.setName("李芳");StringtName=teacher.getName();通过setter、getter方法访问name属性this代表当前类的实例29如何实现封装封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制publicclassTeacher3{privateStringname;//教员姓名privateintage;//年龄publicintgetAge(){ returnage;}publicvoidsetAge(intage){if(age<22){System.out.println("错误!最小年龄应为22岁!");this.age=22;//如果不符合年龄要求,则赋予默认值}else{this.age=age;}}//此处省略对name属性的setter、getter方法}12330如何实现封装使用封装,增加了数据访问限制,增强了程序的可维护性错误!最小年龄应为22岁!大家好!我是李芳,我今年22岁测试类通过调用setter方法,为对象的各个属性赋值31什么是构造方法构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型publicclassTeacher5{privateStringname;//教员姓名//构造方法publicTeacher5(){name="无名氏";}}使用new关键字调用构造方法32带参数的构造方法通过带参数的构造方法,显式地为实例变量赋予初始值publicclassTeacher6{privateStringname;//教员姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位//带参数的构造方法PublicTeacher6(StringpName,intpAge,StringpEducation,StringpPosition){name=pName;age=pAge;//可以增加对age等属性的存取限制条件education=pEducation;position=pPosition;}publicStringintroduction(){return"大家好!我是"+name+",我今年"+age+"岁,学历"+education+",目前职位是"+position;}}33带参数的构造方法通过调用带参数的构造方法,简化对象初始化的代码创建对象时,一并完成了对象成员的初始化工作大家好!我是李芳,我今年23岁,学历本科,目前职位是咨询师34生活中的方法重载类方法方法参数方法实现司机轿车巴士火车驾驶启动、行驶、……等待乘客上车、启动、行驶、到站停车、……正点发车、行驶、到站停车、……如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同35方法重载必须满足的条件重载方法必须满足以下条件:方法名相同。方法的参数类型、个数、顺序至少有一项不相同。方法的返回类型可以不相同。方法的修饰符可以不相同。调用重载方法时,Java使用参数的类型和数量决定实际调用重载方法的哪个版本。36方法重载的代码示例1方法重载并不陌生java.io.PrintStream类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式PrintStreamprintln(int)println(char)println(String)……方法名相同,参数类型不同调用不同的println方法方法重载37生活中的继承生活中,继承的例子随处可见动物食草动物食肉动物谁是父类?谁是子类?能说出继承的特点吗?继承需要符合的关系:is-a,父类更通用、子类更具体38生活中的继承子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性巴士是汽车吗?卡车是汽车吗?出租车是汽车吗?最大载客数量报站引擎数量外观颜色刹车加速汽车最大载重量卸货所属公司最大载客数量打发票属性行为39为什么要使用继承?使用继承,可以有效实现代码复用40如何实现继承在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:publicclassJavaTeacher2

extends

Teacher{//其余代码省略}在父类中只定义一些通用的属性与方法,例如:publicclassTeacher{privateStringname;//教员姓名privateStringschool;//所在中心publicAccpTeacher(StringmyName,StringmySchool){//初始化属性值}publicvoidgiveLesson(){//授课方法的具体实现}publicvoidintroduction(){//自我介绍方法的具体实现}}41如何实现继承子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法publicclassTeacher{privateStringname;//教员姓名privateStringschool;//所在中心publicAccpTeacher(StringmyName,StringmySchool){//初始化属性值}publicvoidgiveLesson(){ //授课方法的具体实现}publicvoidintroduction(){ //自我介绍方法的具体实现

}}publicclassJavaTeacher2extendsTeacher{publicAccpJavaTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("启动Eclipse");super.giveLesson();}}由于giveLesson()方法与父类的实现有所不同,因此重写了该方法方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型父类中的属性和方法可以被子类继承42publicclassJavaTeacher2extendsTeacher{PublicJavaTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}}如何实现继承子类的构造方法中,通过super关键字调用父类的构造方法方法重写后,通过super关键字调用父类的方法publicclassJavaTeacher2extendsTeacher{publicvoidgiveLesson(){System.out.println("启动Eclipse");super.giveLesson();}}通过调用父类的构造方法,完成对属性值的初始化43一切类的“祖先”——Object在Java中,所有的Java类都直接或间接地继承了java.lang.Object类publicclassMyObject{//…}publicclassMyObectextends

Object{

//…}在Eclipse中调用MyObject对象的成员,会自动弹出继承自Object的所有方法44什么是多态简单来说,多态是具有表现多种形态的能力的特征同一个实现接口,使用不同的实例而执行不同操作彩色打印机

打印机黑白打印机打印效果:彩色打印效果:黑白打印打印45publicclassTeacher{publicvoidgiveLesson(){System.out.println("知识点讲解");System.out.println("总结提问");}}publicclassTest{publicstaticvoidmain(String[]args){HQ3hq=newHQ3();hq.judge(newAccpDBTeacher());}}3如何实现多态1、子类重写父类的方法2、编写方法时,使用父类定义的方法3、运行时,根据实际创建的对象类型动态决定使用哪个方法publicclassDBTeacher

extendsTeacher{

publicvoidgiveLesson(){

System.out.println("启动SqlServer");

super.giveLesson();

}}1publicclassHQ3{publicvoidjudge(Teachert){t.giveLesson();}}246什么是Java接口一个Java接口是一些方法特征的集合,但没有方法的实现publicinterfacePCI{

publicvoidstart();

publicvoidstop();

}classSoundCardimplementsPCI{publicvoidstart()

{

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

}

publicvoidstop()

{

System.out.println("Soundstop!");

}

}Java接口中定义的方法在不同的地方被实现,可以具有完全不同的行为这是Java接口,相当于主板上的PCI插槽的规范classNetworkCardimplementsPCI{publicvoidstart()

{

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

}

publicvoidstop()

{

System.out.println("Networkstop!");

}

}47什么是Java接口publicclassAssembler{

publicstaticvoidmain(String[]args){

PCInc=newNetworkCard();

PCIsc=newSoundCard();

nc.start();sc.start();

}

}可以使用Java接口标识类型运行时,根据实际创建的对象类型调用相应的方法实现Dudu...Send...控制台输出2148多态与接口的区别相同点:都是为了实现程序的可扩展和可维护性.不同点:

多态:指实现同一个接口,使用不同的实例而执行不同的操作,必须存在继承关系.

接口:存在共同的方法特征,但对方法有各自不同的实现,不必存在继承关系.

this关键字用于任何实例方法内,指向当前对象this的值指向对其调用当前方法的对象this关键字可在需要当前类类型的对象引用时使用this关键字的示例classPixel{ intx; inty;voidinit(intx,inty){this.x=x;this.y=y;}publicstaticvoidmain(Stringargs[]){Pixelp=newPixel();p.init(4,3);}}对象的引用什么是常量常量是一种标识符,它的值在运行期间恒定不变常量标识符在程序中只能被引用,而不能被重新赋值常量圆周率PI圆周率PI代码表示方式publicstaticfinaldoublePI

=3.149323846;用法将ang角度转换成径度publicstaticdoubletoRadians(doubleang){returnang/180.0*PI;}Java中常量的定义规则加入final关键字代表常量,加入static关键字代表类变量尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串publicclassStudent{publicstaticfinalintFEMALE=1;//代表女性publicstaticfinalintMALE=2;//代表男性privateintsex;//性别publicvoidsetSex(intsex){if(sex==FEMALE) System.out.println("这是一名女学生");elseif(sex==MALE) System.out.println("这是一名男学生");this.sex=sex;}}在Java接口中声明常量在Java接口中声明的变量在编译时会自动加上staticfinal的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点publicinterfaceSchoolType{publicstaticfinalStringschool1=“国立大学";publicstaticfinalStringschool2=“民办大学";}publicinterfaceSchoolType{Stringschool1=“国立大学";Stringschool2=“民办大学";}等同于OO思想总结OO基本特征定义具体实现方式优势封装隐藏实现细节,对外提供公共的访问接口属性私有化、添加公有的setter、getter方法增强代码的可维护性继承从一个已有的类派生出新的类,子类具有父类的一般特性,以及自身特殊的特性继承需要符合的关系:is-a1、实现抽象(抽出像的部分)2、增强代码的可复用性多态同一个实现接口,使用不同的实例而执行不同操作通过Java接口/继承来定义统一的实现接口;通过方法重写为不同的实现类/子类定义不同的操作增强代码的可扩展性、可维护性54精选课件ppt访问修饰符信息隐藏是OOP最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任

温馨提示

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

最新文档

评论

0/150

提交评论