-类对象和接口.ppt
《-类对象和接口.ppt》由会员分享,可在线阅读,更多相关《-类对象和接口.ppt(139页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第章类、对象和接口,4.1 编程语言的几个发展阶段 4.2 类 4.3 对象 4.4 static 关键字 4.5 this 关键字 4.6 包 4.7 访问权限 4.8 类的继承 4.9 对象的上转型对象 4.10 多态性,4.11 abstract 类和abstract方法 4.12 super关键字 4.13 接口 4.14 内部类 4.15 匿名类 4.16 异常类 4.18 基本类型的类包装,4.1 编程语言的几个发展阶段,机器语言(如汇编语言) 计算机处理信息的早期语言是所谓的机器语言 指令都是由0,1组成的序列,称这样的序列为一条机器指令。 过程语言 语言把代码组成叫做过程或函数
2、的块。每个块的目标是完成某个任务 例如,一个C的源程序就是由若干个书写形式互相独立的函数组成。 面向对象编程 面向对象编程主要体现下列三个特性: 1.封装性 2.继承 3.多态 4、重载 Java语言是面向对象语言,它的源程序是由若干个类组成,源文件是扩展名为.java的文本文件,4.2 类,类是组成Java程序的基本要素。 类封装了一类对象的状态和方法。 封装的成员变量用来表示对象的状态;而成员函数表示对象的方法。 类的实现包括两部分:类声明和类体。,class 梯形 float 上底,下底,高,laderArea; /变量定义 float 计算面积() /方法定义 int a; lader
3、Area=(上底+下底)*高/2.0f; return laderArea; ,1.类声明,class People “class People”叫做类声明;“People” 是类名。习惯上类名的第一个字母大写,但这不是必须的。,2.类体,类声明之后的一对大括号“”,“”以及它们之间的内容称做类体。 类体的内容由两部分构成:变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。,class 梯形 float 上底,下底,高,laderArea; /变量定义 float 计算面积() /方法定义 int a; laderArea=(上底+下底)*高/2.0f; return laderA
4、rea; ,class 梯形 float 上底,下底,高,laderArea; /变量定义部分 int a; float 计算面积() /方法定义 int a; laderArea=(上底+下底)*高/2.0f; return laderArea; void 修改高(float h) /方法定义 高=h; ,3.成员变量和局部变量,类的成员变量。 局部变量:在方法体中定义的变量和方法的参数。 作用域对比:成员变量在整个类内都有效,局部变量只在定义它的方法内有效。 成员变量又分为: 实例成员变量(简称实例变量)和 类变量(也称静态变量) . 成员变量的类型前面加上关键字static对所有的此类实
5、例化的对象共享同一内存 如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效 . 这时如果想在该方法内使用成员变量,必须使用关键字this。,class 三角形 float sideA,sideB,sideC,lengthSum; void setSide(float sideA,float sideB,float sideC) this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; this.sideA,this.sideB,this.sideC就分别表示成员变量sideA,sideB,sideC,4
6、.方法,方法的定义包括两部分:方法声明和方法体。 方法参数在整个方法内有效; 方法内定义的局部变量从它定义的位置之后开始有效。 -如果局部变量的定义是在一个复合语句中,那么该局部变量的有效范围是该复合语句,即仅在该复合语句中有效,如果局部变量的定义是在一个循环语句中,那么该局部变量的有效范围是该循环语句,即仅在该循环语句中有效 . 和C语言中写一个函数类似,class Area float getArea(float r) return 3.14f*r*r; double getArea(float x,int y) return x*y; float getArea(int x,float
7、y) return x*y; double getArea(float x,float y,float z) return (x*x+y*y+z*z)*2.0; ,方法:类方法和实例方法,类中的方法分为:实例方法和类方法. 实例方法:方法声明时,方法类型前面不加关键字static 加关键字static的是类方法。 构造方法不能用static修饰构造方法。,类方法和实例方法,加上static直接用类名来调用,所以成为类方法; 而没有static关键字的方法必须用对象实例来调用,成为实例方法。,构造方法,构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,而且没有类型,构造方法也可以重
8、载。,class 梯形 float 上底,下底,高; 梯形() 上底=60; 下底=100; 高=20; 梯形(float x,int y,float h) 上底=x; 下底=y; 高=h; ,缺省的构造方法,当没有构造函数时,系统提供缺省的构造方法,如果调用缺省的构造方法,成员变量的初始化值为缺省值 数值型 是0 Boolean型 false Char “0” 对象 NULL,构造方法,允许有两个不同的构造方法,调用哪一个,由主调函数的参数来决定。 -方法(函数)重载,方法重载,方法重载的意思是: 一个类中的方法具有相同的名字,但参数不同,即或者是参数的个数不同,或者是参数的类型不同。,4.
9、3 对象,类是创建对象的模板。 当使用一个类创建了一个对象时,我们也说我们给出了这个类的一个实例。,1.创建对象,创建一个对象包括对象的声明和为对象分配内存两个步骤。 (1)对象的声明。 一般格式为: 类的名字 对象名字; 如: People zhangPing;,(2)为声明的对象分配内存 使用new运算符 ()为声明的对象分配内存, (2)调用构造方法,没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的。如: zhangPing=new People();,(3)对象的内存模型 使用例子1来说明对象的内存模型 class XiyoujiRenwu float height,w
10、eight; String head, ear,hand,foot, mouth; int speak(String s) System.out.println(s); class A public static void main(String args) XiyoujiRenwu zhubajie; /声明对象 zhubajie=new XiyoujiRenwu(); /为对象分配内存, /默认的构造方法 ,声明对象时的内存模型,当用XiyoujiRenwu类声明一个变量,即对象zhubajie时,如例子1中的对象zhubajie: XiyoujiRenwu zhubajie; 内存模型如
11、左图所示,对象分配内存后的内存模型,当系统见到: zhubajie=new XiyoujiRenwu(); 时,就会做三件事: 为height,weight,head,ear,mouth,hand,foot各个变量分配内存,即XiyoujiRenwu类的成员变量被分配内存空间 执行构造方法中的语句。 new运算符在为变量height,weight,head,ear,mouth,hand,foot分配内存后,将返回一个引用给对象变量zhubajie。,new 关键字的作用,为对象分配内存空间; 调用构造函数; 为对象返回一个引用,2.使用对象,对象:可以操作自己的变量;使用创建它的那个类中的方法
12、的能力。 通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。 当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。,class 梯形 float 上底,下底,高; 梯形() 上底=60; 下底=100; 高=20; 梯形(float x,int y,float h) 上底=x; 下底=y; 高=h; ,梯形 t; t=new 梯形(); t.上底; t.梯形(40f,50,60.5f);,4.4 static 关键字,用static修饰的成员变量称为类变量 用static修饰的方法称为类方法,实例变量和类变量的区别,一个类通过使用new运算符可以创建多个不同的对象;不同
13、的对象的实例变量将被分配不同的内存空间; 如果类中的成员变量有类变量,那么所有的对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。 类变量是和该类创建的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。 因此,类变量不仅可以通过某个对象访问也可以直接通过类名访问。 实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其它对象的这个实例变量。 实例变量可以通过对象访问,不能使用类名访问。,类方法只能操作类变量,而实例方法不受限制,clas
14、s 梯形 float 上底,下底,laderArea; /变量定义部分 float b,高; float 计算面积() /方法定义 int a; laderArea=(上底+下底)*高/2.0f; return laderArea; static void 设定高(float h) /方法定义 高=h; ,注意,静态的成员变量,可以被非静态的方法调用,反之则不行。 为什么main是定义成静态的?,.实例方法和类方法的区别,实例方法可以被类创建的任何对象调用执行。 类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用,4.5 this 关键字,this是Java的一个关键字,表示某个
15、对象。 this可以出现在实例方法和构造方法中,但不可以出现在类方法中。 this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。 this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。,class 三角形 float sideA,sideB,sideC,lengthSum; void setSide(float sideA,float sideB,float sideC) this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; this.sideA,this.sideB,this.sideC就分别表示成员变量si
16、deA,sideB,sideC,4.6 包,包是Java语言中有效地管理类的一个机制。,1.包语句,通过关键字package声明包语句。package 语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句的一般格式为: package 包名; 如果源程序中省略了package语句,源文件中你定义命名的类被隐含地认为是无名包的一部分,即源文件中定义命名的类在同一个包中,但该包没有名字。 包对应着文件系统的目录层次结构 包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成 。,在G:javacnmybole,编译的位置:,运行的位置:,源文件的位置:,.
17、 import 语句,使用import 语句可以引入包中的类。 在编写源文件时,除了自己编写类外,我们经常需要使用Java提供的许多类,这些类可能在不同的包中。 在学习Java语言时,使用已经存在的类,避免一切从头做起,这是面向对象编程的一个重要方面。,/jre/lib/rt.jar 包, io, lang. java.lang自动导入,如其中的system类和String类,不需import语句,导入系统提供的类,类的说明符,public说明符 没有说明符,类名前没有public,则只能在同一个包中的类访问,否则必须声明为public类 也可以将此类在要访问它的类中被import,或给出完整
18、路径,4.7访问权限,类创建了一个对象之后,该对象可以通过“.”运算符操作自己的变量、使用类中的方法,但对象操作自己的变量和使用类中的方法是有一定限制的。 所谓访问权限是指对象是否可以通过“.”运算符操作自己的变量或通过“.”运算符使用类中的方法。 访问限制修饰符有private、protected和public,都是Java的关键字,用来修饰成员变量或方法。,class XiyoujiRenwu pubilc static float height,weight; String head, ear,hand,foot, mouth; public void speak(String s) S
19、ystem.out.println(s); class A public static void main(String args) XiyoujiRenwu zhubajie; /声明对象 zhubajie=new XiyoujiRenwu(); /为对象分配内存, XiyoujiRenwu.height; XiyoujiRenwu.height; ,1.私有变量和私有方法-private,一个类在另外一个类中创建一个对象后,该对象不能访问自己的私有变量和私有方法 对于一个类的私有类变量(静态成员变量),那么在另外一个类中,也不能通过类名来操作这个私有类变量。,.共有变量和共有方法,一个类在
20、另外一个类中创建一个对象后,该对象能访问自己的public变量和public方法 对于一个类的public类变量(静态成员变量),那么在另外一个类中,也能通过类名来操作这个public类变量。,3.友好变量和友好方法,不用private、public 、protected修饰符的成员变量和方法被称为友好变量和友好方法。 一个类在另外一个类中创建一个对象后,如果两个类在同一包中,该对象能访问自己的友好变量和友好方法 对于一个类的友好类变量(静态成员变量),如果两个类在同一包中,那么在另外一个类中,也能通过类名来操作这个友好类变量。,注意:,.受保护的成员变量和方法,一个类在另外一个类中创建一个对
21、象后,如果两个类在同一包中,该对象能访问自己的protected变量和protected方法 对于一个类的protected类变量(静态成员变量),如果两个类在同一包中,那么在另外一个类中,也能通过类名来操作这个protected类变量。,protected和“友好”之间区别?,在继承上,4.8类的继承,继承是一种由已有的类创建新类的机制。 先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。 由继承而得到的类称为子类,被继承的类称为父类(超类)。 Java不支持多重继承(子类只能有一个父类)。,1.子类,在类的声
22、明中,通过使用关键字extends来创建一个类的子类,格式如下: class 子类名 extends 父类名 例如: class Students extends People ,2.子类的继承性,类有可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明定义的,另一部分是从它的父类继承的。 所谓子类继承父类的成员变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己声明的任何实例方法操作. 所谓子类继承父类的方法作为子类中的一个方法,就象它们是在子类中直接声明一样,可以被子类中自己声明的任何实例方法调用。,子类和父类在同一包中的继承性,如果子类和父类
23、在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量; 并且也自然地继承了父类中不是private的方法作为自己的方法; 继承的成员或方法的访问权限保持不变。,子类和父类不在同一包中的继承性,子类继承了父类的protected、public成员变量做为子类的成员变量; 并且继承了父类的protected、public方法为子类的方法, 继承的成员或方法的访问权限保持不变。 子类不能继承父类的友好变量和友好方法。,访问权限小结,Private: -同包和不同包的其他类中创建的对象,均不得访问,只有在本类中创建的对象可以访问; 子类也不能继承; Protect
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象 以及 接口
限制150内