当前位置:文档之家› CH4_类对象和接口sth

CH4_类对象和接口sth


(3)对象的内存模型
使用例子来说明对象的内存模型 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运算符和默认的构造方法 } }
① 为height,weight,head,ear, mouth,hand,foot各个变量分 配内存,即XiyoujiRenwu类的成 员变量被分配内存空间,然后执 行构造方法中的语句。 ② new运算符在为变量height, weight,head,ear,mouth,hand ,foot分配内存后,将返回一个 引用给对象变量zhubajie。
4.3 对象
类是创建对象的模板。 当使用一个类创建了一个对象时, 也说给出了这个类的一个实例。
1.创建对象
创建一个对象包括对象的声明和为对象分 配内存两个步骤。 (1)对象的声明 一般格式为: 类的名字 对象名字; 如: People zhangPing;
(2)为声明的对象分配内存
使用new运算符和类的构造方法为声明的对 象分配内存,如果类中没有构造方法,系统会调 用默认的构造方法(默认的构造方法是无参数的) 。 如: zhangPing=new People();
1. 类声明
示例: class People { … } class People叫做类声明;People 是类名。 习惯上类名的第一个字母大写,但这不是必须的。
2. 类体
写类的目的是为了描述一类事物共有的属 性和功能,描述过程由类体来实现。类声明之 后的一对大括号“{”,“}”以及它们之间的内容 称做类体,大括号之间的内容称做类体的内容 。 类体的内容由两部分构成: 一部分是变量的定义,用来刻画属性; 另一部分是方法的定义,用来刻画功能。
class 梯形 { float 上底,下底,高; 梯形() { 上底=60; 下底=100; 高=20; } 梯形(float x,int y,float h) { 上底=x; 下底=y; 高=h; } }
例子7:
如果想复制其中一个构造方法的某方面效果到另一个构造方法中。可 以通过使用关键字this。 public class Employee { private String name; private int salary; public Employee(String n, int s) { name = n; salary = s; } public Employee(String n) { this(n, 0); } public Employee() { this( " Unknown " ); } }
如果局部变量的定义是在一个复合语句中,那么该局部 变量的有效范围是该复合语句,即仅在该复合语句中有效, 如果局部变量的定义是在一个循环语句中,那么该局部变 量的有效范围是该循环语句,即仅在该循环语句中有效 .
例子2: //VariableTest.java class Variable { //成员变量 int x=0,y=0,z=0; //成员方法 void init(int x,int y) { this.x=x; this.y=y; int z=5; System.out.println(“*** in init ***”); System.out.println(“x=” +x+ “y=”+y+ “z=”+z); } } public class VariableTest { //main方法 public static void main(String args[]) { //类实例化 Variable v = new Variable();
注:
A. 方法重载参数列表必须不同。 B. 要实现方法重载的方法返回类型和参数名不参 与比较。返回类型的不同不区分方法重载。
6.构造方法
构造方法是一种特殊方法,它通常用于初 始化类的数据成员。在创建对象时,会自动调 用类的构造方法。 构造方法的名字必须与所在的类的名字完 全相同,而且没有类型。 构造方法也可以重载。
7. 类方法和实例方法
类中的方法也可分为实例方法和类方法。 方法声明时, 方法类型前面不加关键字static的是实例方法; 加关键字static的是类方法。
注:
构造方法是特殊的方法,不能用static修饰构造方法。8. 注意的Fra bibliotek题见范例
(1) 对成员变量的操作只能在方法中。 (2) 实例方法既可对于类变量也可以对实例变量操作, 类方法只能对类变量操作。 (3) 一个类中的方法可以相互调用,实例方法可以调用 该类中的其他方法;类方法只能调用该类的类方法 。
(3) OOP(Oriented Object Program)的特点
封装性: 对象将变量和方法封装在一起,成为一个整体(对象)。 使得对外部接口和误操作具有保护性。
继承性: 一个对象获取另一个对象的特性的过程。 可以实现代码复用。 被继承的类: 父类、基类 继承父类的类:子类 子类继承父类的状态和行为,也可以修改父类的状态和 行为,同时增加自己特有的状态和行为。
2.使用对象
对象不仅可以操作自己的变量改变状态,而 且还拥有了使用创建它的那个类中的方法的能力 ,对象通过使用这些方法可以产生一定的行为。 通过使用运算符“.”,对象可以实现对自己 的变量访问和方法的调用。 当对象调用方法时,方法中出现的成员变量 就是指该对象的成员变量。
例子3: 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; } }
CH 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文件
4.1 编程语言的几个发展阶 段 4.2 类 4.3 对象 4.4 static 关键字 4.5 this 关键字 4.6 包 4.7 访问权限 4.8 类的继承 4.9 对象的上转型对象 4.10 多态性
例子1: 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
面向对象编程
面向对象编程主要体现下列三个特性: 1. 封装性 2. 继承 3. 多态
Java语言是面向对象语言,它的源程序是由若干个类组成, 源文件是扩展名为.java的文本文件
面向对象的基本概念 (1)对象:现实世界事物的模型化,用变量来维护对象 的状态,用方法来实现对象的行为。例如:轿车 即:对象由描述状态的变量和可用来实现行为的方法 组成。 (2)类:不同的对象具有相同的特征(变量和方法) 即:包含共有变量和方法的一组对象,称为类。例如 :汽车 类的实例化即可创建对象。
class 梯形 { float 上底,下底,高,laderArea; //变量定义部分 float 计算面积() //方法定义 { laderArea=(上底+下底)*高/2.0f; return laderArea; } void 修改高(float h) //方法定义 { 高=h; } }
3.成员变量和局部变量
声明对象时的内存模型
当用XiyoujiRenwu类声明 一个变量,即对象 zhubajie时,如上例子中 的对象zhubajie:
XiyoujiRenwu zhubajie;
内存模型如左图所示
对象分配内存后的内存模型
• 当系统见到:
zhubajie=new XiyoujiRenwu();
时,就会做两件事:
结果为:*** before init *** x=0 y=0 z=0 *** in init *** x=25 y=40 z=5 *** after init *** x=25 y=40 z=0
5.方法重载
定义: 一个类中可以有多个方法具有相同 的名字,但这些方法的参数必须不同, 即或者是参数的个数不同,或者是参数 的类型不同。
System.out.println(“*** before init ***”); System.out.println(“x=” +v.x+ “y=”+v.y+ “z=”+v.z);
//访问成员方法
v.init(25,40); System.out.println(“*** after init ***”); System.out.println(“x=” +v.x+ “y=”+v.y+ “z=”+v.z); } }
相关主题