第4章类、对象和接口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.1 编程语言的几个发展阶段 4.2 类 4.3 对象 4.4 static 关键字 4.5 this 关键字 4.6 包 4.7 访问权限 4.8 类的继承 4.9 对象的上转型对象 4.10 多态性
4.1 编程语言的几个发展阶段(1)
机器语言(如汇编语言) 计算机处理信息的早期语言是所谓的机器语言, 这种语言中的指令都是由0,1组成的序列,称这 样的序列为一条机器指令。 过程语言 语言把代码组成叫做过程或函数的块。每个块的 目标是完成某个任务,例如,一个C的源程序就 是由若干个书写形式互相独立的函数组成。 面向对象编程
4.方法(1)
2、方法体,包括局部变量的定义和合法的JAVA语句。 class A { void f() { int m=10,sum=0; if (m>9) { int z=10; //z仅仅在复合语句中有效 z=z*m+z;} for(int i=0;i<m;i++) {sum=sum+i; } //i仅仅在该循环语句中有效 m=sum; //合法,因为m和sum有效 z=i+sum; //非法,因为i和z已经无效 } }
3.成员变量和局部变量(1)
成员变量又分为实例成员变量(简称实例 变量)和类变量(也称静态变量) .如果成 员变量的类型前面加上关键字static,这样 的成员变量称做是类变量或静态变量。 class Dog { float x; static int y; }
3.成员变量和局部变量(2)
4.方法(2)
写一个方法和C语言中写一个函数类似,只不过 在这里称做方法
5.方法重载
方法重载的意思是:一个类中可以有多个 方法具有相同的名字,但这些方法的参数 必须不同,即或者是参数的个数不同,或 者是参数的类型不同。
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 y) { return x*y; } double getArea(float x,float y,float z) { return (x*x+y*y+z*z)*2.0; } } 注意:方法的返回类型和参数的名字不参与比较,也就是说 如果两个方法的名字相同,即使类型不同,也必须保证参 数类型不同。
4.3 对象
类是创建对象的模板。当使用一个类创建 了一个对象时,我们也说我们给出了这个 类的一个实例。
1.创建对象
创建一个对象包括对象的声明和为对象分 配内存两个步骤。 (1).对象的声明。 一般格式为: 类的名字 对象名字; 如: People zhangPing;
(2)为声明的对象分配内存 使用new运算符和类的构造方法为声明的对 象分配内存,如果类中没有构造方法,系 统会调用默认的构造方法(默认的构造方 法是无参数的,你一定还记得构造方法的 名字必须和类名相同这一规定)。如: zhangPing=new People();
1.类声明
class People {… } “class People”叫做类声明;“People” 是 类名。习惯上类名的第一个字母大写,但 这不是必须的。 而且类名最好容易识别。
2.类体
写类的目的是为了描述一类事物共有的属 性和功能,描述过程由类体来实现。类声 明之后的一对大括号“{”,“}”以及它们之 间的内容称做类体,大括号之间的内容称 做类体的内容。 类体的内容由两部分构:一部分是变量的 定义,用来刻画属性;另一部分是方法的 定义,用来刻画功能。
7.类方法和实例方法
类中的方法也可分为实例方法和类方法. 方法声明时,方法类型前面不加关键字 static的是实例方法、加关键字static的是类 方法。 构造方法是特殊的方法,不能用static修饰 构造方法。
8、要注意的问题
对成员变量的操作只能放在方法中,方法 可以对成员变量和方法体中自己定义局部 变量进行操作。在定义类的成员变量时可 以同时赋予初值。 如class a 正确 class a 不正确 { int a=12;} { int a; a=12;} 如:class a { int a; void f(){int x=111; a=x+1111;}}
第4章

类、对象和接口
4.11 abstract 类和abstract方法 4.12 super关键字 4.13 接口 4.14 内部类 4.15 匿名类 4.16 异常类 4.17 Class类 4.18 基本类型的类包装 4.19 反编译和文档生成器 4.20 jar文件
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
8、要注意的问题
实例方法既能对类变量操作也能对实例变量操作,而类方 法只能对类变量操作。 如 class A { int a; static int b; void f(int x,int y) { a=x; //合法 b=y;//非法} static void g(int z) { b=23; //合法 a=z;//非法}
成员变量和局部变量的类型可以是JAVA中的任何 一种数据类型,包括基本类型和引用类型。 class People { int boy; float a[]; void f() {boolean cool; Workman zhangboy;} } class Workman { double x; }
4.1 编程语言的几个发展阶段(2)
面向对象编程主要体现下列三个特性: 1.封装性 2.继承 3.多态 Java语言是面向对象语言,它的源程序是 由若干个类组成,源文件是扩展名为.java 的文本文件
4.2 类
类是组成Java程序的基本要素。类封装了 一类对象的状态和方法。类是用来定义对 象的模板。 类的实现包括两部分:类声明和类体。
6.构造方法
构造方法是一种特殊方法,它的名字必须 与它所在的类的名字完全相同,而且没有 类型,构造方法也可以重载。 构造方法是在构造类对象时使用的一种特 殊的成员方法,其主要作用是初始化成员 变量.
class 梯形 { float 上底,下底,高; 梯形() { 上底=60; 下底=100; 高=20; } 梯形(float x,int y,float h) { 上底=x; 下底=y; 高=h; } }
3.成员变量和局部变量(1)
我们已经知道类体分为两部分。变量定义部 分所定义的变量被称为类的成员变量。在 方法体中定义的变量和方法的参数被称为 局部变量。 成员变量在整个类内都有效,局部变量只在 定义它的方法内有效。
3.成员变量和局部变量(1)
class Sun { int distance; int find() {int a=12; distance=a ; //合法,distance在整个类内有效 return distance; } void g() { int y; y=a; //非法,因为a已经失效,而方法g中没有定义a }}
(3)对象的内存模型 使用例子1来说明对象的内存模型 例子4.1,4.2 class XiyoujiRenwu { float height,weight; String head, ear,hand,foot, mouth; void speak(String s) { System.out.println(s); } } class A { public static void main(String args[]) { XiyoujiRenwu zhubajie; //声明对象 zhubajie=new XiyoujiRenwu(); //为对象分配内存, //使用new 运 算 符和默认的构造方法 } }
8、要注意的问题
一个类中的方法可以互相调用,实例方法可以调用该类中 的其他方法;类中的类方法只能调用该类的类方法,不能 调用实例方法。如 class A { float a; void setA(float x,float y){a=get(x,y);} static float get(float x,float y) {float c=max(x,y); return c;} static float max(float x,float y) {return x>y?x:y;} }
4.方法(1)
方法参数在整个方法内有效,方法内定义 的局部变量从它定义的位置之后开始有效。 如果局部变量的定义是在一个复合语句中, 那么该局部变量的有效范围是该复合语句, 即仅在该复合语句中有效,如果局部变量 的定义是在一个循环语句中,那么该局部 变量的有效范围是该循环语句,即仅在该 循环语句中有效 .
4.方法(1)
我们已经知道一个类的类体由两部分组成: 变量的定义和方法的定义。方法的定义包 括两部分:方法声明和方法体。 方法声明部分 {方法体的内容}
4.方法(1)
1、方法的声明 最基本的方法声明包括方法名和方法的类型, 如 float area() {…..} void setA(double radius,int a) {…..}
声明对象时的内存模型
当用XiyoujiRenwu类 声明一个变量,即对 象zhubajie时,如例子 1中的对象zhubajie:
XiyoujiRenwu zhubajie;
内存模型如左图所示
对象分配内存后的内存模型
当系统见到:
zhubajie=new XiyoBiblioteka BaidujiRenwu();
时,就会做两件事:
class 梯形 { float 上底,下底,高,laderArea; //变量定义部分 float 计算面积() //方法定义 { laderArea=(上底+下底)*高/2.0f; return laderArea; } void 修改高(float h) //方法定义 { 高=h; } }
3.成员变量和局部变量(1)
分配内存,使用构造方法
class Point { int x,y; Point(int a,int b) { x=a; y=b; } } public class B { public static void main(String args[]) { Point p1,p2; p1=new Point(10,10); p2=new Point(23,35); System.out.println("p1.x="+p1.x+" p1.y="+p1.y); System.out.println("p2.x="+p2.x+" p2.y="+p2.y); } } 注意,如果类里定义了一个或多个构造方法,那么JAVA不提供默认的构造方法。例如该例子中没 有提供不带参数的构造方法,因此,如下创建对象是非法的,p1=new Point(); 构造方法前面是没有任何返回符,不能加任何返回类型,包括void.一个构造方法一旦加了void,那 么这个就不是构造方法了,变成了一个普通的方法。
对象分配内存后的内存模型
3、创建多个不同的对象 一个类通过使用new运算符可以创建多个 不同的对象,这些对象将被分配不同的内 存空间,因此,改变其中一个对象的状态 不会影响其他对象的状态。如 zhubajie=new XiyoujiRenwu(); sunwukong=new XiyoujiRenwu();
① 为height,weight,head,ear, mouth,hand,foot各个变量 分配内存,即XiyoujiRenwu类的 成员变量被分配内存空间,然后 执行构造方法中的语句。 ② new运算符在为变量height, weight,head,ear,mouth, hand,foot分配内存后,将返回 一个引用给对象变量zhubajie。
如果局部变量的名字与成员变量的名字相 同,则成员变量被隐藏,即这个成员变量 在这个方法内暂时失效 . class Tom { int x=98,y; void f() { int x=3; y=x; } }
3.成员变量和局部变量(2)
如果局部变量的名字与成员变量的名字相 同,则成员变量被隐藏。这时如果想在该 方法内使用成员变量,必须使用关键字this。
相关文档
最新文档