




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java
面向对象编程
本章主要内容面向对象的基本概念面向对象的基本语法类和包对象、封装类的方法继承和多态接口和抽象类面向对象开发概念面向对象的基本概念类类是同类事物共同特征和行为的表示,是抽象的,如哺乳动物类,人,男人类是对同类对象的抽象,对象的特征很多,我们只抽像我们关心的部分对象对象是类的具体实现,它包括数据属性,也包括作用于数据的操作(方法)对象把属性和方法密封成一个整体。属性值规定了对象所有可能的状态。对象的方法是指该对象可以提供的外部服务面向对象的基本概念继承类之间的继承关系是现实世界中遗传关系的直接模拟它表示类之间的内在联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某些特征当然,子类也可以具有自己独立的属性和操作消息消息传递是对象与其外部世界相互关联的唯一途径。对象可以向其他对象发出消息以请求服务,也可以响应其他对象传来的消息,完成自身固有的某些操作,从而服务于其他对象
万物皆对象世界是由什么组成的?
名胜人
物品
动物,植物……
身边的对象BritneyJuliette顾客
姓名:朱丽叶年龄:28体重:52千克操作:购买商品收银员
姓名:布兰尼年龄:35体重:60千克操作:收款打印账单对象的特征——属性属性——对象具有的各种特征每个对象的每个属性都拥有特定值例如:布兰尼和朱丽叶的体重不一样60kg
布兰尼属性35岁收银员布兰尼对象的特征——方法方法——对象执行的操作
打单
收银方法刷卡收银员布兰尼说一说描述他们的属性和方法颜色:黑色品牌:BENQ投影姓名:张三年龄:20学习类型:白炽灯开关变亮变暗材制:木质支撑物品教室里的对象封装对象同时具有属性和方法两项特性对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割谁看见过只有“完好的零件和颜色”而不能开动的汽车?类顾客类轿车类
……
类是模子,确定对象将会拥有的特征(属性)和行为(方法)类是对象的类型不同于int类型:具有方法
各种口味的球状冰淇淋
球状冰淇淋模子类和对象的区别类是抽象的概念,仅仅是模板,比如说:“人”对象是一个你能够看得到、摸得着的具体实体,比如:“小布什”小布什普京克林顿……“人”类特征(属性)年龄体重行为(方法)直立行走劳动Java是面向对象的语言
所有Java程序都以类class为组织单元在Java中,类就是自定义的数据类型关键字class定义自定义的数据类型public
classHelloWorld{
publicstaticvoidmain(String[]args){
System.out.println(“HelloWorld!!");…}}Java类模板类将现实世界中的概念模拟到计算机程序中publicclass
类名{
//定义属性部分属性1的类型属性1;
属性2的类型属性2;…
属性n的类型属性n;
//定义方法部分方法1;
方法2;…
方法m;}定义类定义一个类的步骤1、定义类名2、编写类的属性3、编写类的方法定义类定义一个类的步骤1、定义类名publicclassHuman{}2、编写类的属性Stringname;intage;3、编写类的方法publicvoidsayHello(){System.out.println(“HelloHuman”);}如何创建和使用对象使用对象的步骤:使用new创建类的一个对象使用对象:使用“.”进行以下操作给类的属性赋值:对象名.属性调用类的方法:对象名.方法名()HelloWorldhello=newHelloWorld();hello.userName=“张三";//给属性赋值hello.sayHello();
//调用类的方法,该方法中的操作将被执行publicclassHelloWorld{
publicstaticvoidmain(String[]args){HelloWorldhello=newHelloWorld();System.out.println(hello);hello.userName=“张三";hello.sayHello();System.out.println(hello);}}创建和使用对象示例说一说看到什么效果?调用类的方法面向对象(OO)的优点便于程序模拟现实世界中的实体用“类”表示实体的特征和行为隐藏细节对象的行为和属性被封装在类中,外界通过调用类的方法来获得,不需关注内部细节如何实现可重用可以通过类的模板,创建多个类的对象JAVA源文件的组成
JAVA源文件结构package:目录组织结构import:引入所需要的类编译器首先会在classpath指定的路径下搜索,默认情况下,系统会自动导入java.lang包下的所有类.*表示引入该包下的所有类,不包括子包.JAVA类的修饰符修饰符:访问修饰符:public、protected和private非访问修饰符:final、abstractJAVA类的修饰符类的访问控制修饰,主要是限制这个类能否被其他的类所看到,即是否对其它类可
见。public公共访问修饰符:
publicclassClassName{}缺省访问控制符:
classClassName{}JAVA类成员修饰符由于类中某些数据有些可以让人访问,有些又不想让别人访问的时候,就要用到类中成员的访问控制修饰符。public公共访问控制符
publicStringname;缺省访问控制符
int
age
=
20;private
私有访问控制符
privateStringgender="male";protected
保护访问控制符
protectedDatebirthday=newDate();JAVA类成员修饰符访问控制符当前类当前类所在包当前类所有子类其它类privateOK默认OKOKprotectedOKOKOKpublicOKOKOKOKPART2包和访问控制为什么需要包生活案例
文档分门别类,易于查找不同内容的文档可以放在不同的袋子中,拥有相同的名字,避免冲突
易于管理为什么需要包树形文件系统使用目录解决文件同名冲突问题如何存放两个同名的类而不冲突?Sort.java
插入排序Sort.java
冒泡排序如何创建包packagecom.ntc.sample;classHuman{
……publicStringgetName(){
……}}
包名使用package声明包,以分号结尾如果有包的声明,一定作为Java源代码的第一条语句包命名规范包名由小写字母组成,不能以圆点开头或结尾自己设定的包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。如:域名自己设定的包名部分依不同机构各自内部的规范不同而不同packagemypackage;package
com.ntc.mypackage;package
com.ntc.research.powerproject;部门名项目名package.mypackage;×用Eclipse创建包使用Eclipse创建包的两种方法:分别创建包和类:创建项目→创建包→创建类创建类的过程中创建类所在的包创建项目→创建类(在此过程中声明所属包,如无声明,则显示“缺省包”)包与目录的关系创建好的包和Java源文件是如何存储的?创建包com.ntc.sample,即创建了目录结构:..\com\ntc\sampleChapter04comntcsampleHuman.javaFather.java在包资源管理器和导航器中观察包中的目录结构如何导入包为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类importjava.util.*;//导入java.util包中所有类importjava.lang.*;//导入java.lang包中所有类import
包名.类名;1、系统包(eg:java.lang)2、自定义包:com.ntc.sample*:指包中的所有类Human:指包中的Human类
关键字import并不陌生类和包之间的关系包这种技术有以下好处:类的分类存放:具有相似功能的类可以放置在同一个包中,这样可以很容易地查找定位类避免命名冲突:发类同名时,会导致命名冲突,可以把类放在不同包中,通过包名引用类可以避免命名冲突控制类之间的访问(访问标识符)类的修饰符类、成员变量的修饰符类、成员方法的修饰符PART3对象的调用
含参数构靠造方法有一个40岁的”张三”,我们用下面的程序来描述他。声明对象Manzhangsan;建立对象使用new运算符和类的构造方法为声明的对象分配内存空间,如果类中没有构造方法,系统会调用默认的无参构造方法。
对象名=new构造方法(形参列表);zhangsan=newMan(“张三”,40);4.6.2对象的引用和清除当生成了对象,分配了内存空间之后,对象就开始了其生存周期,在此生存周期之内,我们可以引用该对象的方法,比如:参考课本例4.12对象数据成员的引用方式如下: 对象名.数据成员名=“张三”;//给属性赋值对象的成员方法的引用方式如下: 对象名.成员方法名(实际参数表)zhangsan.setAge(20);//调用类的方法,该方法中的操作将被执行4.6.2对象的引用和清除当一个对象完成了其任务之后,我们就可以回收该对象的内容资源,从内存中清除掉该对象,终结它的生存周期。Java对象的另一个很实用的技术是对象的拷贝,即”Clone”。创建和使用对象示例使用对象的步骤:使用new创建类的一个对象使用对象:使用“.”进行以下操作给类的属性赋值:对象名.属性调用类的方法:对象名.方法名()Humanhuman=newHuman();=“张三";//给属性赋值human.getName();//调用类的方法,该方法中的操作将被执行publicclassHuman{
publicstaticvoidmain(String[]args){Humanzhangsan=newHuman();System.out.println(zhangsan);=“张三";
zhangsan.age=10;System.out.println(zhangsan);}}创建和使用对象示例创建“zhangsan”对象说一说看到什么效果?4.6.3对象方法的调用类的方法调用包括两种,静态方法的调用和非静态方法的调用。静态方法是指用static来形容的,可以直接用类名.方法名()来执行的方法。非静态方法就是不用static形容的方法,必须要生成对象之后才能调用。 参看课本例对象方法的调用
对于基本类型是传值,类的对象是传地址。
参看课本例4.14
变量声明和方法声明如下:程序入口:PART4类的方法
理解变量作用域会定义和使用类的方法会添加类方法的JavaDoc注释会阅读JavaSE6文档本章目标类的方法写出狮子对象的“跑”方法写出狮子对象的“叫”方法
电动玩具狮子属性:颜色:黄色行为:跑叫按此按钮,狮子开始跑类的方法示例publicclassAutoLion{Stringcolor="黄色";
public
void
run(){System.out.println("正在以0.1米/秒的速度向前奔跑");}
publicStringbark(){Stringsound="吼";
returnsound;}}AutoLion类代码实现方法名称方法体返回类型如何定义类的方法类的方法定义类的某种行为(或功能)
方法的定义
方法的名称
方法的主体
方法返回的数据类型定义类的方法public返回值类型方法名(){//这里编写方法的主体}步骤一:定义方法名以及返回值步骤二:编写方法体方法的命名如何给方法起名字?必须以字母、‘_’或‘$’开头可以包括数字,但不能以它开头遵循的命名规范通常方法名是一个动词,如果有两个以上单词组成,第一个单词的首字母小写,其后单词首字母大写方法的返回值两种情况如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型如果方法没有返回值,返回类型为voidpublicclassStudent{Stringname="张三";publicvoidgetName(){
returnname;}……}返回类型要匹配return
表达式;编译错误常见错误2-1publicclassHelloWorld{
……publicstaticvoidmain(String[]args){
……
return
“HelloWorld!";}}返回类型是void方法中不能有返回值常见错误2-2publicclassStudent{
publicdoublegetInfo(){
doubleweight=95.5;
doubleheight=1.69;
returnweight,height;}}方法至多可以返回一个值,不能返回多个值方法调用方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果方法调用:执行方法中包含的语句
对象名.方法名();小明过生日,爸爸送他一个电动狮子玩具,编程测试这个狮子能否正常工作方法调用publicclassAutoLion{Stringcolor="黄色";publicvoidrun(){//方法1:跑
System.out.println("正在以0.1米/秒的速度向前奔跑。");}
publicStringbark(){//方法2:叫
Stringsound="吼";
returnsound;}
public
StringgetColor(){//方法3:获得颜色属性
return
color;}
publicStringshowLion(){//方法4:描述狮子特性
return"这是一个"+getColor()+"的玩具狮子!";}publicclassTestLion{
publicstaticvoidmain(String[]args){AutoLionlion=newAutoLion();System.out.println(lion.showLion());lion.run();System.out.println(lion.bark());}}在类的方法中调用该类另一个方法在main()方法中调用类的方法方法调用小结方法之间允许相互调用,不需要知道方法的具体实现,提高了效率
情况举例1、类Student的方法a()调用Student类的方法b(),直接调用publicvoida(){b();//调用b()}2、类Student的方法a()调用类Teacher的方法b(),先创建类对象,然后使用“.”调用publicvoida(){Teachert=newTeacher();t.b();//调用Teacher类的b()}构造方法构造方法是一个特殊的方法。在Java中,对象是被构造出来的。Java中的每个类都有构造方法,用来初始化该类的一个对象。构造方法具有和类名相同的名称,而且不返回任何数据类型重载经常用于构造方法构造方法只能由new运算符调用classPoint{
intx,y;
Point(){
x=0;y=0;
}
Point(intx,inty){
this.x=x;
this.y=y;
}
}
为什么需要构造方法2-1开发Java教员类JavaTeacher,要求:具有属性:姓名、年龄、学历、职位具有行为:自我介绍publicclassJavaTeacher{privateStringname;//姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位publicStringintroduction(){return"大家好!我是"+name+",我今年”+age+"岁,学历“
+education+",目前职位是"+position;}publicStringgetName(){ returnname;}publicvoidsetName(StringmyName){ name=myName;}//以下是其他属性的setter、getter方法,此处省略}为什么需要构造方法2-2编写一个测试类,要求:实例化一个教员对象,并对其初始化在控制台输出该教员的自我介绍publicclassJavaTeacherTest{publicstaticvoidmain(String[]args){JavaTeacherteacher=newJavaTeacher();teacher.setName("李芳");teacher.setAge(23);teacher.setEducation("本科");System.out.println(roduction());}}要简化对象初始化的代码,可以通过构造方法来解决大家好!我是李芳,我今年23岁,学历本科,目前职位是nullJavaTeacher中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?什么是构造方法构造方法负责对象成员的初始化工作为实例变量赋予合适的初始值构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型publicclassJavaTeacher{privateStringname;//教员姓名//构造方法publicJavaTeacher(){name="无名氏";}}publicclassJavaTeacherTest{publicstaticvoidmain(String[]args){ JavaTeacherteacher=newJavaTeacher();}}使用new关键字调用构造方法通过带参数的构造方法,显式地为实例变量赋予初始值publicclassJavaTeacher{privateStringname;//教员姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位//带参数的构造方法publicJavaTeacher(StringpName,intpAge,StringpEducation,StringpPosition){name=pName;age=pAge;education=pEducation;position=pPosition;}publicStringintroduction(){return"大家好!我是"+name+",我今年"+age+"岁,学历"+education+",目前职位是"+position;}}带参数的构造方法通过调用带参数的构造方法,简化对象初始化的代码publicclassJavaTeacherTest{publicstaticvoidmain(String[]args){JavaTeacherteacher=newJavaTeacher("李芳",23,"本科","咨询师");System.out.println(roduction());}}创建对象时,一并完成了对象成员的初始化工作大家好!我是李芳,我今年23岁,学历本科,目前职位是咨询师构造函数链对某个类类型使用new时,在运行时将调用构造函数使用newJavaTeacher()时真正发生了什么(假设JavaTeacher继承Teacher,而Teacher继承Object)调用JavaTeacher构造函数调用Teacher构造函数调用Object构造函数为Object成员变量赋值Object构造函数完成为Teacher成员变量赋值Teacher构造函数完成为JavaTeacher成员变量赋值JavaTeacher构造函数完成JavaTeacherteacher=newJavaTeacher();1、main()调用newJavaTeacher()2、JavaTeacher()调用super()3、Teacher()调用super()4、Object()构造函数规则构造函数能够使用任何访问控制符,包括private构造函数名称必须与类名匹配构造函数一定不能有返回类型普通方法名可以和类名相同如果在类代码中不键入构造函数,编译器将自动生成默认构造函数默认构造函数总是无变元构造函数构造函数规则如果在类代码中键入了带参数的构造函数,则就不会存在无参数构造函数,除非重新键入无变元的构造函数每个构造函数都必须把this(),super()作为第一条语句super()的调用可以是无变元的,也可以是有变元的抽象类具有构造函数接口没有构造函数生活中的方法重载类方法方法参数方法实现司机轿车巴士火车驾驶启动、行驶、……等待乘客上车、启动、行驶、到站停车、……正点发车、行驶、到站停车、……如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同方法重载java.io.PrintStream类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式publicclassTest{publicstaticvoidmain(String[]args){inti=0;charc='z';Stringstr="hello";System.out.println(i);System.out.println(c);System.out.println(str);}}PrintStreamprintln(int)println(char)println(String)……方法名相同,参数类型不同调用不同的println方法方法重载java.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法Mathmax(inta,intb)max(floata,floatb)max(longa,longb)max(doublea,doubleb)publicclassTest{publicstaticvoidmain(String[]args){Math.max(1,2);Math.max(1.0F,2.F);Math.max(1.0,2);}}方法重载构造方法重载2-1构造方法重载是方法重载的典型示例publicclassJavaTeacher{privateStringname;//教员姓名privateStringschool="北京中心";//所在中心publicJavaTeacher(Stringname){ =name;//设定教员姓名}publicJavaTeacher(Stringname,Stringschool){=name;//设定教员姓名this.school=school;//设定教员的所在中心}publicStringintroduction(){ return"大家好!我是"+school+"的"+name;}}构造方法重载构造方法重载2-2通过调用不同的构造方法来表达对象的多种初始化行为默认情况下,教师来自北京中心,初始化时,只需提供教员姓名有时,需要提供所在中心名称及教员姓名publicclassJavaTeacherTest{publicstaticvoidmain(String[]args){JavaTeacherteacher1=newJavaTeacher("李芳");System.out.println(roduction());JavaTeacherteacher2=newJavaTeacher("张欣",
"天津中心");System.out.println(roduction());}}大家好!我是北京中心的李芳大家好!我是天津中心的张欣给定如下Java代码,请指出代码中的错误,并解释原因。publicclassSample{privateintx;publicSample(){ x=1;}publicSample(inti){ x=i;}publicintSample(inti){x=i;returnx++;}privateSample(inti,Strings){}publicSample(Strings,inti){}privateSampla(inti){ x=i++;}privatevoidSampla(inti){ x=i++;}}小结无参构造方法带参构造方法不是构造方法带参构造方法带参构造方法名称与类名不相同不是构造方法变量作用域3-1publicclassAutoLion{Stringcolor="黄色";publicvoidrun(){//方法1:跑
System.out.println("正在以0.1米/秒的速度向前奔跑。");}
publicStringbark(){//方法2:叫
Stringsound="吼";returnsound;}
publicStringgetColor(){//方法3:获得颜色属性
returncolor;}
publicStringshowLion(){//方法4:输出类的描述信息
return"这是一个"+getColor()+"的玩具狮子!叫声是"+sound;}}可以调用吗?变量作用域变量声明的位置决定变量作用域变量作用域确定可在程序中按变量名访问该变量的区域…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
成员变量
局部变量
局部变量面向对象的编程思维ScoreCalc类和
Test类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调用调用类的方法实现某个特定的功能,别的类不需要知道它如何实现!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年演艺行业管理专业考试试题及答案
- 2025年网络工程与管理知识考试试题及答案
- 2025年经济学硕士研究生入学考试题及答案
- 2025年基础数学知识与应用能力考试卷及答案
- 2025年国际标准化与质量管理考试试题及答案
- 2025年甘肃省武威市凉州区金沙镇招聘专业化管理大学生村文书笔试模拟试题带答案详解
- 特岗培训日常管理制度
- 特殊工作安全管理制度
- 特殊紧急信息管理制度
- 特殊药物使用管理制度
- 2024年黄冈团风县招聘城区社区工作者真题
- 济宁市城市介绍家乡旅游攻略PPT
- 熊浩演讲稿全
- 巡检培训课件.ppt
- 北师大版五下书法《第6课戈字旁》课件
- 国家开放大学电大本科《设施园艺学》2023-2024期末试题及答案(试卷代号:1329)
- (精华版)国家开放大学电大本科《小学数学教学研究》单项选择题题库及答案.doc
- 关于地理高考四大能力要求解读
- 灭火救援作战计划图例
- 空气动力学PPT课件
- 医科大学附属医院十八项核心制度汇编
评论
0/150
提交评论