《第面向对象编程基础.pptx》由会员分享,可在线阅读,更多相关《第面向对象编程基础.pptx(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、世界是由什么组成的?名胜名胜人人物品物品 动物动物 ,植物,植物 面向对象编程基础面向对象编程基础第1页/共63页对象的特征属性属性对象具有的各种特征 每个对象的每个属性都拥有特定值例如:王小红和朱小雨的体重不一样60kg王小红王小红属性属性35岁岁收银员小王收银员小王 第2页/共63页对象的特征方法方法对象执行的操作打单打单收银收银方法方法刷卡刷卡收银员王小红收银员王小红第3页/共63页封装对象同时具有属性和方法两项特性对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割谁看见过只有谁看见过只有“完好完好的零件和颜色的零件和颜色”而不而不能开动的汽车?能开动的汽车?第
2、4页/共63页类:从对象抽取出类顾客类轿车类 类是模子,确定对象将会拥有的类是模子,确定对象将会拥有的特征(属性)和行为(方法)特征(属性)和行为(方法)类是对象的类型类是对象的类型不同于不同于int类型:具有方法类型:具有方法各种口味的球状冰淇淋各种口味的球状冰淇淋球状冰淇淋模子球状冰淇淋模子第5页/共63页类和对象有什么区别呢?类是抽象的概念,仅仅是模板,比如说:“人”对象是一个你能够看得到、摸得着的具体实体,比如:“小布什”小布什小布什普京普京克林顿克林顿“人人”类类特征(属性)特征(属性)年龄年龄体重体重行为(方法)行为(方法)衣衣食食住住行行第6页/共63页Java 是面向对象的语言
3、 所有所有Java程序都以类程序都以类class为组织单元为组织单元关键字关键字class定义自定义的数据类型定义自定义的数据类型publicclassHelloWorldpublicstaticvoidmain(Stringargs)使用使用Java语言理解程序逻辑语言理解程序逻辑);第7页/共63页Java类模板类将现实世界中的概念模拟到计算机程序中publicclass类名类名/定义属性部分定义属性部分属性属性1的类型的类型属性属性1;属性属性2的类型的类型属性属性2;属性属性n的类型的类型属性属性n;/定义方法部分定义方法部分方法方法1;方法方法2;方法方法m;第8页/共63页定义类定
4、义一个类的步骤1、定义类名2、编写类的属性3、编写类的方法第9页/共63页常见错误publicclass.BookStringbookName;StringauthorName;intpageNum;booleanisAvailable;类命名规则:类命名规则:1、不能使用、不能使用Java关键字关键字2、首字母可以为字母,也可以是、首字母可以为字母,也可以是“_”或或“$”(建议不要这建议不要这样样)3、不能包含空格或、不能包含空格或“.”号号代码错误代码错误第10页/共63页如何创建和使用对象使用对象的步骤:使用new创建类的一个对象使用对象:使用“.”进行以下操作给类的属性赋值:对象名.
5、属性调用类的方法:对象名.方法名()Schoolcenter=newSchool();center.schoolName=“北京大学北京大学;/给属性赋值给属性赋值center.toString();/调用类的方法,该方法中的操作将被执行调用类的方法,该方法中的操作将被执行第11页/共63页面向对象(OO)的优点便于程序模拟现实世界中的实体用“类”表示实体的特征和行为隐藏细节对象的行为和属性被封装在类中,外界通过调用类的方法来获得,不需关注内部细节如何实现可重用可以通过类的模板,创建多个类的对象第12页/共63页数据类型总结intdoublechar String使用使用class定义的类型定
6、义的类型StudentTeacherSchool基本数据类型基本数据类型引用数据类型引用数据类型第13页/共63页数据类型使用区别数据类型数据类型特征特征声明声明使用使用基本数据类型基本数据类型没有方法没有方法inti=8;i+;引用数据类型引用数据类型具有方法具有方法Studentstu=newStudent();stu.age+;第14页/共63页类的方法写出狮子对象的“跑”方法写出狮子对象的“叫”方法电动玩具狮子电动玩具狮子属性:属性:颜色:黄色颜色:黄色行为:行为:跑跑叫叫按此按钮,按此按钮,狮子开始跑狮子开始跑第15页/共63页如何定义类的方法类的方法定义类的某种行为(或功能)方法的
7、定义方法的定义方法的名称方法的名称方法的主体方法的主体方法返回的数据类型方法返回的数据类型定义类的方法定义类的方法public返回值类型返回值类型方法名方法名()/这里编写方法的主体这里编写方法的主体第16页/共63页方法的命名如何给方法起名字?必须以字母、_或开头可以包括数字,但不能以它开头遵循的命名规范通常方法名是一个动词,如果有两个以上单词组成,第一个单词的首字母小写,其后单词首字母大写第17页/共63页方法的返回值两种情况如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型如果方法没有返回值,返回类型为voidpublicclassStudentStr
8、ingname=张三张三;publicvoidgetName()returnname;return表达式;表达式;编译错误编译错误第18页/共63页常见错误public class School public static void main(String args)return“北京大学!;第19页/共63页常见错误public class Student public double getInfo()double weight=95.5;double height=1.69;return weight,height;方法至多可以返回一个值,方法至多可以返回一个值,不能返回多个值不能返回多个
9、值第20页/共63页方法调用方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果方法调用:执行方法中包含的语句 对象名对象名.方法名()方法名();第21页/共63页方法调用小结方法之间允许相互调用,不需要知道方法的具体实现,提高了效率 情况情况举例举例1、类、类Student的方法的方法a()调用调用Student类类的方法的方法b(),直接调用,直接调用publicvoida()b();/调用调用b()2、类、类Student的方法的方法a()调用类调用类Teacher的方法的方法b(),先创建类对象,然后使用,先创建类对象,然后使用“.”调用调用publicvoida()Teach
10、ert=newTeacher();t.b();/调用调用Teacher类的类的b()第22页/共63页变量作用域变量声明的位置决定变量作用域变量作用域确定可在程序中按变量名访问该变量的区域for(inti=0,a=0;i4;i+)a+;a的作用域仅在的作用域仅在for循环中循环中第23页/共63页变量作用域变量变量1类型类型变量变量1;变量变量2类型类型变量变量2;变量变量3类型类型变量变量3;publicclassAutoLionAutoLion类的方法类的方法别的类的方法别的类的方法谁能使用这些变量?谁能使用这些变量?方法方法1方法方法2成员变量成员变量局部变量局部变量局部变量局部变量第2
11、4页/共63页面向对象的编程思维ScoreCalc类 和 Test类publicstaticvoidmain(Stringargs)Scannerinput=newScanner(System.in);请输入请输入Java成绩:成绩:);intjava=input.nextInt();/*计算并显示输出计算并显示输出*/inttotal=java+c+db;doubleavg=total/3;总成绩:总成绩:+total);平均分平均分:+avg);calcDiffTimecalcTotalScore()ScoreCalcshowTotalScore()calcAvg()showAvg()ma
12、in()/程序入口程序入口/计算并输出总成绩计算并输出总成绩/计算并输出平均分计算并输出平均分Test调用调用调用调用类的方法实现某个特定的功能,类的方法实现某个特定的功能,别的类不需要知道它如何实现!别的类不需要知道它如何实现!知道了实现此功能的类和它的方法名,知道了实现此功能的类和它的方法名,就可以直接调用了,不用重复写代码!就可以直接调用了,不用重复写代码!第25页/共63页什么是封装publicclassTeacher2privateStringname;/教员姓名教员姓名/返回教员姓名返回教员姓名publicStringgetName()returnname;/设定教员姓名设定教员姓
13、名publicvoidsetName(Stringname)this.name=name;封装,就是隐藏实现细节将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性 Teacher2teacher=newTeacher2();teacher.setName(李芳李芳);StringtName=teacher.getName();通过通过setter、getter方法方法访问访问name属性属性this代表当前类的实例代表当前类的实例第26页/共63页27如何实现封装封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter)方法和取值(getter
14、)方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制publicclassTeacher3privateStringname;/教员姓名教员姓名privateintage;/年龄年龄publicintgetAge()returnage;publicvoidsetAge(intage)if(age22)错误!最小年龄应为错误!最小年龄应为22岁!岁!);this.age=22;/如果不符合年龄要求,则赋予默认值如果不符合年龄要求,则赋予默认值elsethis.age=age;/此处省略对此处省略对name属性的属性的setter、getter方法方法123第2
15、7页/共63页28如何实现封装publicclassTeacher3Testpublicstaticvoidmain(Stringargs)AccpTeacher3teacher=newAccpTeacher3();teacher.setName(李芳李芳);teacher.setAge(10);使用封装,增加了数据访问限制,增强了程序的可维护性使用封装,增加了数据访问限制,增强了程序的可维护性错误!最小年龄应为错误!最小年龄应为22岁!岁!大家好!我是李芳,我今年大家好!我是李芳,我今年22岁岁测试类通过调用测试类通过调用setter方法,为对象的各个属性赋值方法,为对象的各个属性赋值第28
16、页/共63页29什么是构造方法构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型publicclassTeacher5privateStringname;/教员姓名教员姓名/构造方法构造方法publicTeacher5()name=无名氏无名氏;PublicTeacher5Testpublicstaticvoidmain(Stringargs)Teacher5teacher=newTeacher5();使用使用new关键字调用构造方法关键字调用构造方法第29页/共63页30带参数的构造方法通过带参数的构造方法,显式地为
17、实例变量赋予初始值 publicclassTeacher6privateStringname;/教员姓名教员姓名privateintage;/年龄年龄privateStringeducation;/学历学历privateStringposition;/职位职位/带参数的构造方法带参数的构造方法PublicTeacher6(StringpName,intpAge,StringpEducation,StringpPosition)name=pName;age=pAge;/可以增加对可以增加对age等属性的存取限制条件等属性的存取限制条件education=pEducation;position=p
18、Position;publicStringintroduction()return大家好!我是大家好!我是+name+,我今年,我今年+age+岁,学历岁,学历+education+,目前职位是目前职位是+position;第30页/共63页31带参数的构造方法通过调用带参数的构造方法,简化对象初始化的代码publicclassTeacher6Testpublicstaticvoidmain(Stringargs)Teacher6teacher=newTeacher6(李芳李芳,23,本科本科,咨询师咨询师);大家好!我是李芳大家好!我是李芳,我今年我今年23岁,学历本科,目前职位是咨询师岁,
19、学历本科,目前职位是咨询师第31页/共63页32生活中的方法重载类类方法方法方法参数方法参数方法实现方法实现司机司机轿车轿车巴士巴士火车火车驾驶驾驶启动、行驶、启动、行驶、等待乘客上车、启动、等待乘客上车、启动、行驶、到站停车、行驶、到站停车、正点发车、行驶、正点发车、行驶、到站停车、到站停车、如果用代码实现,我们需要三个方法,这些方法的方法名称如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同相同,参数类型不同第32页/共63页33方法重载必须满足的条件重载方法必须满足以下条件:方法名相同。方法的参数类型、个数、顺序至少有一项不相同。方法的返回类型可以不相同。方法的修饰符
20、可以不相同。调用重载方法时,Java 使用参数的类型和数量决定实际调用重载方法的哪个版本。第33页/共63页34方法重载的代码示例 1方法重载并不陌生类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式publicclassTestpublicstaticvoidmain(Stringargs)inti=0;charc=z;Stringstr=hello;PrintStreamprintln(int)println(char)println(String)调用不同的调用不同的println方法方法方方法法重重载载第34页/共63页35生活中的继承生活中,继承的例子随处可
21、见动物动物食草动物食草动物食肉动物食肉动物谁是父类?谁是父类?谁是子类?谁是子类?能说出继承的特点吗?能说出继承的特点吗?继承需要符合的关系:继承需要符合的关系:is-a,父类更通用、子类更具体,父类更通用、子类更具体第35页/共63页36生活中的继承 子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性巴士是汽车吗?巴士是汽车吗?卡车是汽车吗?卡车是汽车吗?出租车是汽车吗?出租车是汽车吗?最大载客数量最大载客数量报站报站引擎数量引擎数量外观颜色外观颜色刹车刹车加速加速汽车汽车最大载重量最大载重量卸货卸货所属公司所属公司最大载客数量最大载客数量打发票打发票属性属性行为行为第36页/共6
22、3页37为什么要使用继承?使用继承,可以有效实现代码复用使用继承,可以有效实现代码复用第37页/共63页38如何实现继承在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:publicclassJavaTeacher2extendsTeacher/其余代码省略其余代码省略在父类中只定义一些通用的属性与方法,例如:在父类中只定义一些通用的属性与方法,例如:publicclassTeacherprivateStringname;/教员姓名教员姓名privateStringschool;/所在中心所在中心publicAccpTeacher(StringmyName,String
23、mySchool)/初始化属性值初始化属性值publicvoidgiveLesson()/授课方法的具体实现授课方法的具体实现publicvoidintroduction()/自我介绍方法的具体实现自我介绍方法的具体实现第38页/共63页39如何实现继承子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法publicclassTeacherprivateStringname;/教员姓名教员姓名privateStringschool;/所在中心所在中心publicAccpTeacher(StringmyName,StringmySchool)/初始化属性值初始化属性值publicvoid
24、giveLesson()/授课方法的具体实现授课方法的具体实现publicvoidintroduction()/自我介绍方法的具体实现自我介绍方法的具体实现publicclassJavaTeacher2extendsTeacherpublicAccpJavaTeacher2(StringmyName,StringmySchool)super(myName,mySchool);publicvoidgiveLesson()启动启动Eclipse);super.giveLesson();方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型方法重写:子类和父类的方法具有相同的名称、参数列表、返
25、回类型父类中的属性和方法可父类中的属性和方法可以被子类继承以被子类继承第39页/共63页40publicclassJavaTeacher2extendsTeacherPublicJavaTeacher2(StringmyName,StringmySchool)super(myName,mySchool);如何实现继承子类的构造方法中,通过super关键字调用父类的构造方法方法重写后,通过方法重写后,通过super关键字调用父类的方法关键字调用父类的方法publicclassJavaTeacher2extendsTeacherpublicvoidgiveLesson()启动启动Eclipse);
26、super.giveLesson();第40页/共63页41一切类的“祖先”Object在Java 中,所有的Java类都直接或间接地继承了类publicclassMyObject/publicclassMyObectextendsObject /在在Eclipse中调用中调用MyObject对象的成员,会自动弹出继对象的成员,会自动弹出继承自承自Object的所有方法的所有方法第41页/共63页42什么是多态简单来说,多态是具有表现多种形态的能力的特征 同一个实现接口,使用不同的实例而执行不同操作彩色打印机彩色打印机打印机打印机黑白打印机黑白打印机打印效果:彩色打印效果:彩色打印效果:黑白打
27、印效果:黑白打印打印打印打印第42页/共63页43publicclassTeacherpublicvoidgiveLesson()知识点讲解知识点讲解);总结提问总结提问);publicclassTestpublicstaticvoidmain(Stringargs)HQ3hq=newHQ3();hq.judge(newAccpDBTeacher();3如何实现多态1、子类重写父类的方法2、编写方法时,使用父类定义的方法3、运行时,根据实际创建的对象类型动态决定使用哪个方法publicclassDBTeacherextendsTeacherpublicvoidgiveLesson()Syste
28、m.out.println(启动启动SqlServer);super.giveLesson();1publicclassHQ3publicvoidjudge(Teachert)t.giveLesson();2第43页/共63页44什么是Java接口一个Java接口是一些方法特征的集合,但没有方法的实现publicinterfacePCIpublicvoidstart();publicvoidstop();classSoundCardimplementsPCIJava接口中定义的方法在不同的地方被实现,可以具有接口中定义的方法在不同的地方被实现,可以具有完全不同的行为完全不同的行为这是这是Jav
29、a接口,相当于主接口,相当于主板上的板上的PCI插槽的规范插槽的规范classNetworkCardimplementsPCI第44页/共63页45什么是Java接口publicclassAssemblerpublicstaticvoidmain(Stringargs)PCInc=newNetworkCard();PCIsc=newSoundCard();nc.start();sc.start();可以使用可以使用Java接口标识类型接口标识类型运行时,根据实际创建的对象类型调用相应的方法实现运行时,根据实际创建的对象类型调用相应的方法实现Dudu.Send.21第45页/共63页46多态与接
30、口的区别相同点:都是为了实现程序的可扩展和可维护性.不同点:多态:指实现同一个接口,使用不同的实例而执行不同的操作,必须存在继承关系.接口:存在共同的方法特征,但对方法有各自不同的实现,不必存在继承关系.第46页/共63页47this 关键字用于任何实例方法内,指向当前对象this 的值指向对其调用当前方法的对象 this 关键字可在需要当前类类型的对象引用时使用 第47页/共63页this 关键字的示例class Pixel int x;int y;void init(int x,int y)this.x=x;this.y=y;public static void main(String a
31、rgs)Pixel p=new Pixel();p.init(4,3);对象的引用第48页/共63页49什么是常量常量是一种标识符,它的值在运行期间恒定不变常量标识符在程序中只能被引用,而不能被重新赋值常量常量圆周率圆周率PI圆周率圆周率PI代码表示代码表示方式方式publicstaticfinaldoublePI=3.14159265358979323846;用法用法将将ang角度转换成径度角度转换成径度publicstaticdoubletoRadians(doubleang)returnang/180.0*PI;第49页/共63页50Java中常量的定义规则加入final 关键字代表常量
32、,加入static 关键字代表类变量尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串publicclassStudentpublicstaticfinalintFEMALE=1;/代表女性代表女性publicstaticfinalintMALE=2;/代表男性代表男性privateintsex;/性别性别publicvoidsetSex(intsex)if(sex=FEMALE)这是一名女学生这是一名女学生);elseif(sex=MALE)这是一名男学生这是一名男学生);this.sex=sex;第50页/共63页51在Java接口中声明常量在Java 接口中声明的变量在编译
33、时会自动加上static final的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点publicinterfaceSchoolTypepublicstaticfinalStringschool1=“国立大学国立大学;publicstaticfinalStringschool2=“民办大学民办大学;publicinterfaceSchoolTypeStringschool1=“国立大学国立大学;Stringschool2=“民办大学民办大学;等同于等同于第51页/共63页52OO思想总结OO基本基本特征特征定义定义具体实现方式具体实现方式优势优势封装封装隐藏实现细节,对外提供隐藏
34、实现细节,对外提供公共的访问接口公共的访问接口属性私有化、添加公有的属性私有化、添加公有的setter、getter方法方法增强代码的可维增强代码的可维护性护性继承继承从一个已有的类派生出新从一个已有的类派生出新的类,子类具有父类的一的类,子类具有父类的一般特性,以及自身特殊的般特性,以及自身特殊的特性特性继承需要符合的关系:继承需要符合的关系:is-a1、实现抽象(抽、实现抽象(抽出像的部分)出像的部分)2、增强代码的可、增强代码的可复用性复用性多态多态同一个实现接口,使用不同一个实现接口,使用不同的实例而执行不同操作同的实例而执行不同操作通过通过Java接口接口/继承来定义继承来定义统一的
35、实现接口;通过方法统一的实现接口;通过方法重写为不同的实现类重写为不同的实现类/子类定子类定义不同的操作义不同的操作增强代码的可扩增强代码的可扩展性、可维护性展性、可维护性第52页/共63页53访问修饰符信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任何实现细节所作的更改不会影响使用该类的代码防止用户意外删除数据此类易于使用访问修饰符访问修饰符访问修饰符访问修饰符访问修饰符访问修饰符privateprotectedpublic默认第53页/共63页54访问修饰符该类或非该类均该类或非该类均可访问可访问public只有该类可以访只有该类可以访问问privat
36、e相同数据包中的相同数据包中的类可以访问类可以访问默认默认该类及其子类的该类及其子类的成员可以访问,成员可以访问,同一个包中的类同一个包中的类也可访问也可访问protected第54页/共63页55访问修饰符访问修饰符可访问性位置private默认protectedpublic同一个类是是是是同一个包内的类否是是是不同包内的子类否否是是不同包并且不是子类否否否是第55页/共63页56方法修饰符方法修饰符方法修饰符方法修饰符方法修饰符staticfinalabstract第56页/共63页57static 修饰符static修饰符修饰的方法叫静态方法目的使该方法独立于类的实例,使用类去访问,而不
37、是类实例,所以也叫类方法第57页/共63页58static 修饰符调用静态方法的语法为:classname.methodname();规规规规 则则则则可以调用其他静态方法必须访问静态数据不能使用super 或 this 关键字第58页/共63页59final 修饰符 finalfinal不能修改变量不能修改变量子类不能重写方法子类不能重写方法第59页/共63页60abstract 修饰符由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类抽象方法必须声明在抽象类中抽象方法语法:abstract type method_name(parameter_list);声明抽象类
38、语法:abstract class 使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节第60页/共63页61abstract 修饰符抽象类可以具有指向子类对象的对象引用 abstractabstract抽象类不能被实例化构造方法 和 static方法不能是抽象的父类的抽象方法往往在子类中实现 第61页/共63页62JAVA小应用程序-Java Applet它是嵌入在Web页上供浏览器运行的程序,也可放在服务器上供客户端下载使用,每个小应用程序继承一、小应用程序建立到运行的4个步骤:1、用Java语言编写小应用程序的源程序。2、小应用程序翻译成字节码。3、将小应用程序的字节码嵌入到Web页中,设计一个指定小应用程序的HTML文件 使用标记 4、在支持Java的浏览器上运行。二、熟悉APPLET类的基本方法作用。第62页/共63页感谢您的观看!第63页/共63页