版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象的程序设计与结构化程序设计方法相比,更符合人类认识现实世界的思维方式,已成为程序设计的主流方向面向对象将数据和对数据的操作封装在一个整体中。面向对象其实是现实世界模型的自然延伸。现实世界是由一个一个对象组成;对象之间通过消息(请求和服务)相互协作,完成系统的功能.第2章类与对象的基本概念面向对象的程序设计第2章类与对象的基本概念一个“结构化”程序示例铅笔数=5钢笔数=6圆珠笔数=4其它笔数=7……//销售程序段铅笔数=铅笔数-1//卖出了1支铅笔其它笔数=其它笔数-2//卖出了2支其它笔……//采购程序段钢笔数=钢笔数+20//新进了20支钢笔圆珠笔数=圆珠笔数+10//新进了10支圆珠笔……2.1面向对象的程序设计方法概述一个“结构化”程序示例笔店{铅笔;钢笔;圆珠笔;其它笔;卖出(笔种类,数量){笔种类=笔种类-数量;}进货(笔种类,数量){笔种类=笔种类+数量;}盘点(){打印铅笔;//打印出当前铅笔的库存量打印钢笔;//打印出当前钢笔的库存量打印圆珠笔;//打印出当前圆珠笔的库存量打印其它笔;//打印出当前其它笔的库存量}}“数据结构”+“算法”=程序状态(属性)+行为(方法)=对象一个“结构化”程序示例2.1面向对象的程序设计方法概述一对象:是一种对客观事物的抽象,它由状态(属性)和行为(方法)组成。现实世界中的对象有两个共同特征:状态和行为
状态对象:是一种对客观事物的抽象,它由状态(属性)和行为(方法)类:是对象的集合也就是由所有相似对象的状态变量(属性变量)与行为(方法)所构成的模板或原型。(相同对象的集合的描述)例:定义了“笔店”这个类,它拥有4个属性:
1)铅笔;
2)钢笔;
3)圆珠笔;
4)其它笔同时还定义了三个行为:
1)卖出:将属性的值减少,表示卖出;
2)进货:将属性的值增加,表示进货;
3)盘点:打印出属性的值;
在主函数中,先定义了一个属于“笔店”的对象:“张三笔店”,然后就可以对这个对象进行操作了。类:是对象的集合也就是由所有相似对象的状态变量(属性变量)与用类创建对象—实例化当我们要通过汽车类来创建一个轿车对象,并使用它的刹车行为方法时,则要用下面的格式进行实例化:
//实例化汽车对象汽车轿车=new汽车();
//引用汽车对象的刹车方法轿车.刹车();用类创建对象—实例化当我们要通过汽车类来创建一个轿车对象,并类与对象类和对象是Java的核心和本质。它们是Java语言的基础,编写一个Java程序,在某种程度上来说就是定义类和创建对象。定义类和建立对象是Java编程的主要任务。
要学习Java编程就必须学会怎样去编写类,即怎样用Java的语法去描述一类事物共有的属性和功能。类与对象要学习Java编程就必须学会怎样去编写涉及的主要概念抽象封装继承多态涉及的主要概念封装:就是把一组数据和与其有关的操作集合组装在一起,形成一个能动的实体,也就是对象。是一种信息隐蔽技术利用抽象数据类型将数据和基于数据的操作封装在一起用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象。
例:就象电路设计,以前是用一个个晶体管的,后来把能完成某一功能的晶体管做在一起封装起来,并只提供几只引脚,外界只能通过这些引脚而不能通过别的途径来"访问"内部功能,这就成了集成电路。封装使得一个对象具备独立和明确的功能,并提供接口便于和其它对象作用,而其内部的代码和数据都是受保护的。好处不言自明。封装:就是把一组数据和与其有关的操作集合组装在一起,形成一个继承:是指一个类(即称子类)因承袭而具有另一个类(或称父类)的能力和特征的机制或关系。
例如,汽车中有货车、客车、轿车……:1)用于运输货物的汽车叫货车;2)用于运输旅客的汽车叫客车;3)豪华的、较低矮、较小的、汽车叫轿车。而汽车、货车、客车、轿车都是类!在本例中,汽车这个类是货车、客车、轿车这三个类的超类(Superclass),而货车、客车、轿车这三个类则是汽车这个类的子类(subclass)。
如果定义了超类,那么子类就可以直接将超类中定义的状态、行为继承过来,不再需要另外定义了。因为这些属性子类也是具备的。而子类之所以成为子类,是因为它们相对于超类而言,还有一些不同的地方,这需要增加一些属性、行为。还有一些子类需要对继承过来的超类进行一些局部的修改,使其更能真实子类的特性。继承:是指一个类(即称子类)因承袭而具有另一个类(或称父类)为什么要引入继承的概念呢?1)继承机制提高了“软件可复用性”。在结构化的程序设计中,常常将一些经常要使用的功能模块写成子程序,供程序调用,这样会大大提高开发效率。这也就是“软件复用”。
而通过继承,我们可以在已定义类的基础上无限地繁衍出更多的类,并且通过直接继承、新增、局部修改来重复使用超类。这样必将使软件开发的速度更快,同时可以使程序共享成为可能。
共享代码:通过共享代码,我们就可以继承他人写的或系统提供的类,直接使用现成的程序码并可以加以改写,扩展成为我们需要的东西。2)继承机制的另一个好处在于它使得接口更加一致。
当超类衍生出许多的子类时,它的行为接口通过继承,也传给了所有的子类。这样,做消息传递时,就无需关心每个子类的接口,它们都是一致的。为什么要引入继承的概念呢?1)继承机制提高了“软件可复用性”多态:指在超类中定义的属性或行为,被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在超类及其各个子类中具有不同的语义。
不同的对象可以调用相同名称的函数,却能导致完全不同的行为的现象。这在现实生活中也会发生,比如"我"这个对象去调用"玩电脑"这个"函数"时,一般发生的是打字的行为,而"我表弟"去调用"玩电脑"这个函数时,总是发生"游戏大战"的行为。这是由于"玩电脑"这个函数它能根据不同的对象做出不同的反应。我们只管"玩电脑"就行了。
多态:指在超类中定义的属性或行为,被子类继承之后,可以具有不2.2类与对象
[public][abstract|final]class
类名称 [extends父类名称][implements接口名称列表]
{
变量成员声明及初始化; 方法声明及方法体;
}类的声明定义类(声明类)实际就是定义类的静态属性和动态属性(方法)。用户定义一个类实际上就是定义一个新的抽象数据类型。使用类之前,必须先定义它,然后才可利用所定义的类来声明相应的变量,并创建对象。2.2类与对象 类的声明定义类(声明类)实际就是定义类的类的关键字class
在类声明中,class是声明类的关键字,表示类声明的开始,类声明后面跟着类名,按习惯类名要用大写字母开头,并且类名不能用阿拉伯数字开头。给类名命名时,最好取一个容易识别且有意义的名字,避免A、B、C之类的类名。
各组成部分的具体说明
类的关键字class在类声明中,class是声明类的类修饰符
方括号“[]”中的修饰符是可选项,它是一组限定类、成员变量和成员方法是否可以被程序里的其他部分访问和调用的控制符。一个类可以有多个修饰符,但abstract和final相互对立,所以不能同时应用在一个类的定义中。各组成部分的具体说明
修饰符含义public将一个类声明为公告类,它可以被任何对象访问abstract将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例final将一个类声明为终结类即非继承类,表示它不能被其他类所继承,即不能有子类。也就是说,不能用它通过扩展的办法来创建新类。缺省表示只有在相同包中的对象才能使用这样的类类修饰符方括号“[]”中的修饰符是可选项,它是一组限声明父类extendsextends为声明该类的父类,这表明该类是其父类的子类。一个子类可以从它的父类继承变量和方法。extends只能实现单继承。如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后
各组成部分的具体说明
声明父类extendsextends为声明该类的父类,这表明实现接口在类声明中使用关键字implements实现接口。如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后。当要实现有多个接口时,各接口名以逗号分隔,其形式为:
implements接口1,接口2,…,…
接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。一个类可以实现多个接口,以某种程度实现“多继承”。各组成部分的具体说明
实现接口在类声明中使用关键字implements实现接口。如声明成员变量一个类的成员变量描述了该类的状态声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性在一个类中成员变量名是唯一的数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)各组成部分的具体说明
[修饰符]变量类型变量名[=初值];声明成员变量一个类的成员变量描述了该类的状态各组成部分的具体修饰符含义public公共访问控制符。指定该变量为公共的,它可以被任何对象的方法访问。private私有访问控制符。指定该变量只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此变量。protected保护访问控制符。指定该变量只可以被它自己的类及其子类和同一包中的其他类访问,在子类中可以覆盖此变量。缺省缺省访问控制符时,则表示在同一个包中的其他类可以访问此成员变量,而其他包中的类不能访问该成员变量。final最终修饰符。指定此变量的值不能改变static静态修饰符。指定该变量被所有对象共享,即所有的实例都可使用该变量。transient过渡修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量。volatile易失修饰符。指定该变量可以同时被几个线程控制和修改。成员变量修饰符的含义注:除了访问控制修饰符有多个之外,其他的修饰符都只有一个。一个成员变量可以被两个以上的修饰符同时修饰,但有些修饰符是不能同时定义在一起的。修饰符含义public公共访问控制符。指定该变量为公共的,它声明成员方法定义类的行为一个对象能够做的事情我们能够从一个对象取得的信息类的方法是用来定义对类的成员变量进行操作的,是实现类内部功能的机制,同时也是类与外界进行交互的重要窗口。在Java中,必须通过方法才能完成对类和对象的属性操作。成员方法只能在类的内部声明并加以实现。一般在类体中声明成员变量之后再声明方法。可以没有,也可以有多个;各组成部分的具体说明
声明成员方法定义类的行为各组成部分的具体说明[修饰符]返回值的数据类型方法名(参数列表){
语句序列;
return[表达式];
}说明:(1)方法声明包括方法名、返回类型和参数。如果不需要传递参数到方法中,只需将方法名后的圆括号写出即可,不必填写任何内容。另外,若方法没有返回值,则返回值的数据类型应为void,且return语句可以省略。(2)方法体是一对大括号“{}”之间的内容。[修饰符]返回值的数据类型方法名(参数列表)说明:修饰符含义public公共访问控制符。指定该方法为公共的,它可以被任何对象的方法访问。private私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此方法。protected保护访问控制符。指定该方法只可以被它自己的类及其子类和同一包中的其他类访问。缺省缺省访问控制符时,则表示在同一个包中的其他类可以访问此成员变方法,而其他包中的类不能访问该成员方法。final最终修饰符。指定该方法不能被重载。static静态修饰符。指定不需要实例化一个对象就可以激活的方法。synchronized同步修饰符。在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程访问,允许结束后解锁。native本地修饰符。指定此方法的方法体式用其他语言(如c语言)在程序外部编写的。成员方法修饰符的含义注:成员方法与成员变量同样有多个控制修饰符,当用两个以上的修饰符来修饰一个方法时,需要注意,有的修饰符之间是互斥的,所以不能同时使用。修饰符含义public公共访问控制符。指定该方法为公共的,它22classCircle//定义圆形类Circle{doubleradius;//声明成员变量radiusdoublepi=3.14;//声明成员变量pi并赋初值
doublearea()//定义成员方法area(),用来计算圆面积
{returnpi*radius*radius;}}例——圆类Circle2.2类与对象22classCircle//定义圆形类Circle例—23publicclassClock{
//成员变量
inthour;intminute;intsecond;//成员方法
publicvoidsetTime(intnewH,intnewM,intnewS){hour=newH;minute=newM;second=newS;}publicvoidshowTime(){System.out.println(hour+":"+minute+":"+second);}}例2-1——钟表类(P34)2.2类与对象23publicclassClock{例2-1——对象的声明与引用
可以将对象理解为一种新型的变量。对象之间靠互相传递消息而相互作用,消息传递的结果是启动方法,完成一些行为或者修改接受消息的对象的属性。对象完成工作后,将被销毁,所占用的资源将被系统回收。
一个对象的生命周期:创建->使用->销毁类是一个抽象的概念,而对象是类的具体化。类通过实例化生成对象。类的对象也称为类的实例对象的声明与引用可以将对象理解为一种新型的变量。对象的声明格式
类名变量名;例如:Clock是已经声明的类名,则声明的变量aclock将用于存储该类对象的引用:Clockaclock;声明一个引用变量时并没有对象生成对象的创建生成实例的格式:
对象名=new<类名>();
例如:aclock=newClock(); 其作用是:在内存中为此对象分配内存空间返回对象的引用(reference,相当于对象的存储地址)类名对象名=new类名([参数列表]);对象的声明对象的创建类名对象名=new类名([参数列对象的使用
格式
对象名.对象成员类是不能直接使用的,我们只能类实例化后的对象。而对象的使用是通过访问对象变量或调用对象方法。通过运算符“.”可以实现对对象的变量访问和方法的调用。对象的使用(1)
访问对象的变量
访问格式:
对象名.成员变量;
例如,设有一个A类其结构如下:
classA
{intx;}
对变量x赋值,先创建并实例化类A的对象a,然后再通过对象给变量x:
(2)调用对象的方法调用格式:对象名.方法名([参数列表]);
Aa=newA();a.x=5;(1)访问对象的变量
访问格式:对象名.成员变量;classCircle//定义圆形类Circle{doubleradius;//声明成员变量radiusdoublepi=3.14;//声明数据成员pi并赋初值
doublearea()//定义成员方法area(),用来计算圆面积
{returnpi*radius*radius;//在类内部使用类自己的成员时不必指明成员名称前的对象名}}classMycircle{publicstaticvoidmain(String[]args){
//主方法
Circleacircle=newCircle();
//声明并创建对象acircle
acircle.radius=10;
//调用acircle对象的radius成员
doubles=acircle.area();//调用acircle对象的area()方法
System.out.println(s);
}}例——圆类Circle2.2类与对象如果Java程序中有多个类的,经编译后编译之后便会产生相等数目的.class文件。(可以把两个类放在一个源文件中,但文件名必须与public类同名)若要强调是“对象本身的成员”的话,则可以在成员名前加this关键字,即“this.成员名”。此时this即代表调用此成员
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新生儿口腔护理方法
- 电商物流配送时效优化策略
- 多功能智能数据录入管理系统解决方案
- 关于2026年度财务预算审核的回复函(4篇)
- 健身房会员服务指南
- 订单交货时间变更商洽函6篇
- 护理与信息技术的发展
- 量子信息科技研究应用承诺书6篇范文
- 现代酒店运营管理实务手册
- 游览安全责任保证承诺书(7篇)
- 六一儿童节主题班会
- 2026年深圳高三数学高考三模冲刺卷:三角向量与空间几何(教师命题组版第1套)含参考答案、逐题解析与评分细则
- 湖南省郴州市2026年中考语文第一次模拟监测试卷附答案
- 2026年5月浙江省Z20高三语文联考9篇考场高分范文:当一个人向你树立边界时
- 德州市2026届高三(三模)语文试题(含答案)
- 2026浙江杭州仲裁委员会招聘工作人员13人考试参考题库及答案解析
- 统编(2024)八年级历史下册第17课推进国防军队建设和外交工作【课件】
- FZ/T 20021-2012织物经汽蒸后尺寸变化试验方法
- IATF16949五大工具培训 课件
- ANSYS电磁场仿真实验报告
- 加工合同模板
评论
0/150
提交评论