预科班 —— 面向对象编程

38
预预预——预预预预预预

description

预科班 —— 面向对象编程. 目标. 面向对象的基本概念。 类的声明以及成员变量、方法的声明和访问权限。 对象的生成和使用。 继承和多态的概念及其实现。 this 和 super 的使用。 包和接口的使用。. 对象. 对象是具有某些特殊属性(数据)和行为方式(方法)的实体 实例。 可以是有生命的个体,比如一个人或一只老虎。也可以是无生命的个体,比如一辆汽车或一台计算机。也可以是一个抽象的概念,如天气的变化或鼠标所产生的事件。. 两个特征: 属性 ( Property )和 行为 ( Behavior ) 如:一个人的属性有:姓名、性别、年龄、身高、体重等 - PowerPoint PPT Presentation

Transcript of 预科班 —— 面向对象编程

Page 1: 预科班 —— 面向对象编程

预科班——面向对象编程

Page 2: 预科班 —— 面向对象编程

目标

• 面向对象的基本概念。• 类的声明以及成员变量、方法的声明

和访问权限。• 对象的生成和使用。• 继承和多态的概念及其实现。• this 和 super 的使用。• 包和接口的使用。

Page 3: 预科班 —— 面向对象编程

对象 • 对象是具有某些特殊属性(数据)和行为

方式(方法)的实体 实例。 可以是有生命的个体,比如一个人或一只

老虎。也可以是无生命的个体,比如一辆汽车或一台计算机。也可以是一个抽象的概念,如天气的变化或鼠标所产生的事件。

两个特征:属性( Property)和行为( Behavior)如:一个人的属性有:姓名、性别、年龄、身高、体重等行为有:唱歌、打球、骑车、学习等。

Page 4: 预科班 —— 面向对象编程

消息

单一对象的存在并没有多大的作用,只有多个对象相互作用才会完成复杂的行为。

对象和对象之间是通过传递消息来完成相互通信的。

一个消息由三方面内容组成: 1)消息的接收者,即消息的目标对象; 2)接收对象采用的方法; 3)执行方法所需用的参数 (Parameters)。 例如:一辆自行车放在车棚中并没有什么用,当我们人骑上它,并加速时才体现它的作用,其中接收者(自行车),采用的方法(加速),所需的参数(上升到更高的档位)。

Page 5: 预科班 —— 面向对象编程

• 类是具有共同属性和行为的对象的抽象。

• 类可以定义为数据和方法的集合。

• 对象具有特殊属性和行为方式的实体。

对象

抽象

实例化

封装的实体 =数据 +方法

操作或行为

属性或状态

方法

数据或变量

Page 6: 预科班 —— 面向对象编程

Obejct

所有类的根类默认继承

Page 7: 预科班 —— 面向对象编程

面向对象的基本特征1. 封装:将数据成员( Data Member )和属

于此数据的操作方法( Operating Method ),放在同一个实体( Entity )或对象中。

2. 继承:父类定义( Define )一些通用的属性与行为,其孩子继续使用。

3. 多态:在同一个类中可有许多同名的方法,或者子类重写父类方法。但其参数数量与数据类型不同,而且操作过程与返回值也可能会不同。

( 1 )模块化 ( 2)信息隐藏

( 1 )实现代码复用 ( 2 )简化设计过程

解决其他语言中不能重名的问题

Page 8: 预科班 —— 面向对象编程

类的定义 类的定义格式为:[ 类修饰符 ]class name { type variable1; //属性 … type variableN; // 方法 这类事物的功能// 返回类型 方法名字 (参数列表 ){实现 } type methodname1(parameter-list){ // 方法体 } … type methodnameN(parameter-list){ // 方法体 }

}

成员变量(对象属性)

成员方法(对象行为或操作)

Page 9: 预科班 —— 面向对象编程

Class Bus{ Int num; String color; String begin; String end; Static boolean isLoad=true; Bus(){

Num=20; Color=“white”; Begin=“aa”;

} // 定义 ------ 参考

Void load(String station){

} }

Page 10: 预科班 —— 面向对象编程

构造方法 new • 构造函数名称与类名称相同• 构造函数没有返回类型• 其任务是在创建对象时初始化其内部状态• 若无定义系统默认有一个无参构造方法class Fruit { boolean seedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) { seedLess = seed; seasonal = season; price = p; } }

Page 11: 预科班 —— 面向对象编程

用构造函数自动初始化

如果某个类有一个构造函数,那么在创建对象的时候, Java 会自动调用那个构造函数。 构造函数的名字和类的名字相同。

Page 12: 预科班 —— 面向对象编程

修饰符 2-1

publicPrivate

SetName getName is__(): 做逻辑判断

protected如果为空默认为包级作用域

Page 13: 预科班 —— 面向对象编程

类的布局

一般先写属性接着写构造函数后面写方法属性最好设为 private ,如果要在类外使

用该属性,为其设定专门的 get 方法

Page 14: 预科班 —— 面向对象编程

修饰符 2-2用来说明类、方法或变量的类型。Int x=45;String y=“”;Bus Z=new Bus();

static 全局变量、方法 类变量和方法final 类、变量、方法 常量、终类和方法native 方法 方法体可用其他语言abstract 类、方法 抽象类和方法synchronized 方法 线程互斥

Page 15: 预科班 —— 面向对象编程

成员变量 • 作用范围是整个类。与局部变量不同。• 可以使用修饰符来控制变量的作用范围。• 格式: < 修饰符 >< 数据类型 >< 名称 >(=<

初值 >)• 修饰符可以为:• static :定义类变量,区分实例变量。• final :用来声明常量,值只能用不能改。

Page 16: 预科班 —— 面向对象编程

成员方法 • 定义方法的一般格式:

[access] type methodname1([parameter-list]){ // 方法体}

public void setdt(int day,int month,int year){ day=23; month=7; year=2003;}

方法名称返回类型修饰符,

可选参数列表,

可选

Page 17: 预科班 —— 面向对象编程

类的对象(1) 对象的声明和创建 类名 对象名; // 声明 对象名 ( 引用 )=new 类名(参数); // 创建(2) 对象的使用 对象名 . 成员变量名; 对象名 . 成员方法名(参数列表);(3) 对象的销毁自动垃圾回收机制周期性的释放无用的对象。

Page 18: 预科班 —— 面向对象编程

类和对象实例public class RectangleDemo{ double length; double width; void setL(double l,double w){ length=l; width=w;} double area(){ return length*width;} public static void main(String args[]){ RectangleDemo r1; r1=new RectangleDemo(); r1.setL(10,20); System.out.println(“area:”+r1.area());}}

Page 19: 预科班 —— 面向对象编程

类的使用1. 类对象作为类的成员2. 类对象作为方法的参数3. 方法返回值为类对象

Page 20: 预科班 —— 面向对象编程

5.6.1 包的创建( 1 )缺省情况下为无名包( 2 )有名包的创建:使用 package 语句

如: package pname

或 package dir1.dir2.pname

包就是一个文件夹,里面存放 .class 文件,包中的“ .”号表示子文件夹。

Page 21: 预科班 —— 面向对象编程

5.6.2 包的引用( 1 )使用包名、类名前缀

例如: mypack1.mypack2.Myclass

( 2 )加载引用:使用 import 语句格式: import

mypack1.mypack2.Myclass

或 import mypack. mypack2.*

( 3 )直接引用:在同一文件夹下

Page 22: 预科班 —— 面向对象编程

5.6.3 设置 CLASSPATH环境变量CLASSPATH 变量指明“ .class” 文件存放的位置。

编译时: javac –d CLASSPATH路径 Myclass.java

例如: javac –d d:\java myclass.java

则直接在 d:\java 下创建在 myclass.java

指明的包目录,并把Myclass.class拷到该目录下。

Page 23: 预科班 —— 面向对象编程

5.3.1 类继承的实现 2-1• 被继承的类称为父类• 继承父类的类称为子类• 执行继承时,子类将获得父类的属性,并具

有自身特有的属性。

Emoloyee 类: name sex

Worker 类: category dressAllowance

Officer 类: empClass vehicle

工人类,继承了父类的姓名和性别属性外还包含类别和是否有服装津贴属性

主任类,还包含级别和是否配备交通工具属性

职员类,具有姓名和性别两个属性

Page 24: 预科班 —— 面向对象编程

5.3.1 类继承的实现 2-2

• extends关键字用于继承类。• 声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name { // 类体 }

没有 extends,默认父类为 Object 只能有一个父类,即单继承 子类继承父类的全部成员

注意

Page 25: 预科班 —— 面向对象编程

5.3.2 this 和 super关键字1.this 的使用( 1 )访问当前对象的数据成员( 2 )访问当前对象的成员变量( 3 )重载时用来引用同类的其他构造方法2.super 的使用( 1 )访问直接基类中被隐藏的数据成员( 2 )调用直接基类中被重写的成员方法( 3 )调用直接基类的构造方法

Page 26: 预科班 —— 面向对象编程

5.3.3 抽象类和抽象方法• 定义目的是提供可由其子类共享的一般形式。• 抽象类不能实例化。• 抽象方法没有函数体。• 抽象方法必须在子类中最终给出具体实现。• 抽象类中可以没有抽象方法,有抽象方法的类一

定是抽象类。• 抽象类必须继承,子类根据自身需要扩展抽象类。• abstract不能和 final 叠用修饰类。• 不能有 private成员变量和方法。• 不能和 private、 static、 final 叠用修饰方法。

Page 27: 预科班 —— 面向对象编程

5.3.4 类对象之间的类型转换子类对象和基类对象之间的转换:( 1 )子类对象可以隐式转换为基类对象( 2 )处于相同类层次的类对象之间不能进行转换

( 3 )基类对象在一定的条件下可以转换成子类对象,但必须使用强制类型转换。

Page 28: 预科班 —— 面向对象编程

5.4.1 方法重载• 方法重载是 Java 实现面向对象的多态性机

制的一种方式。• 同一个类中多个方法有相同的名字,不同

的参数列表,这种情况称为方法重载。• 返回类型不同并不足以构成方法重载。• 当重载方法被调用时,编译器根据参数的

类型和数量来确定实际调用哪个重载方法的版本。

Page 29: 预科班 —— 面向对象编程

5.4.2 方法重写• 方法重写是 Java 实现多态性机制的另一种方式。• 在类层次结构中,如果子类中的一个方法与父类

中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法重写。

• 重写方法通过父类引用被调用, Java 根据当前被引用对象的类型来决定执行哪个版本的方法。

• 可通过 super关键字调用直属父类中被重写的方法。

• 子类定义与父类同名的变量,使父类变量隐藏,但仍有自己的空间,在子类中可调用。

• 子类重写父类方法,会清除父类空间,在子类中不存在。

Page 30: 预科班 —— 面向对象编程

5.5.1 接口的定义 [ 修饰符 ] interface 接口名称 {

[public] [static] [final] 变量名=初值; //静态常量

[public] [abstract] [native] 返回值 方法名( [ 参数表 ] ) throws [异常列表 ] // 方法

}

由于接口中定义的方法都是抽象、公有的,常量都是静态、公有的,所以修饰符可以省略。

说明:( 1)通常接口的名字以 able 或 ible 结尾;( 2)可以使用 implements 来继承接口的常量和抽象方法, 但它与类中的 extends 不同,它可以有多个父接口, 各父接口间用逗号隔开;( 3)接口中的所有常量必须是 public static final ,方法 必须是 public abstract ,这是系统默认的,不管你在定义 接口时,写不写修饰符都是一样的。

Page 31: 预科班 —— 面向对象编程

5.5.2 接口的实现在类的声明中使用 implements关键字来

实现接口,一个类可以同时实现多个接口,各接口间用“,”隔开。

class classname implements interfacename{

// 重写接口中的方法;}

说明:( 1)若实现接口的类不是抽象类,则必须实现所有接口的所有方法,即为所有的抽象方法定义方法体。( 2)一个类在实现某接口抽象方法时,必须使用完全相同的方法名,参数列表。( 3)接口的抽象方法的访问控制符已指定为 public ,所以类在实现时,必须显示的使用 public 修饰符,否则被警告缩小了接口中定义的方法的访问控制范围。

Page 32: 预科班 —— 面向对象编程

实例:接口的定义和实现interface A{ double g=9.8; void show( );}class B implements A{ public void show( )

{System.out.println(“g=“+g);}

}

class InterfaceTest{ public static void main(String args[ ]) { A b=new B( ); b.show( ); }}

Page 33: 预科班 —— 面向对象编程

5.5.3 接口的继承interface A{

int sub(int a,int b);

}

interface B extends A{

int add(int a,int b);

}

interface C extends B{

int mul(int a,int b);

}

组合:interface A{int sub(int a,int b);}interface B{int add(int a,int b);}interface C extends A,B{int mul(int a,int b);}

Page 34: 预科班 —— 面向对象编程

5.5.4 接口的多态interface viecle{

abstract boolean start( );

}

class Car implements viecle{

boolean start( ){ //发动引擎 }

}

class Ship implements viecle{

boolean start( ){ //抛锚 }

}

Page 35: 预科班 —— 面向对象编程

5.5.7 Java 类库Java 中常用的包有:

applet 、 awt 、 io 、 lang 、 net 、 util

Page 36: 预科班 —— 面向对象编程

总结1.掌握面向对象程序设计的基本概念,对象、

类、面向对象的基本特征(封装、继承和多态)。

2.掌握类、对象、继承、抽象类、接口和包的定义与使用。

3.掌握各种修饰符的使用方法。4.掌握定义类时的各种细节,构造方法的定义

和使用,方法的重载,方法的重写。

Page 37: 预科班 —— 面向对象编程

课后练习 1. 编写一个 Java应用程序 , 该程序有 3 个类 :Triangle,Lader 和

Circle, 分别用来表示”三角形”、“梯形”和“圆形”,要求: Triangle 类具有类型为 double 的三个边以及周长、面积属

性, Triangle 类具有返回周长、面积以及修改三个边的功能, Triangle 类还具有一个 boolean 类型的属性,该属性用来判断三个数能否构成一个三角形。

(计算三角形面积: double p=( sideA+ sideB+ sideC ) /2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));

Lader 类具有类型为 double 的上底、下底,高、面积属性,具有返回面积的功能。

Circle 类具有类型为 double 的半径,周长和面积属性,具有返回周长、面积的功能。

2. 编写方法 distance, 计算两点 (x1,y1) 和 (x2,y2) 之间的距离 . 所有数值和返回值都是 double 型 .从屏幕上输入两个点的坐标 , 计算出两点的距离后输出 .

Page 38: 预科班 —— 面向对象编程

课后练习

习题练习编写多类关系的程序 设计一个银行的用户帐户类 UserAccount:

属性:用户名,密码,身份证号, 帐户资金方法:对于每个属性要实现 get 方法, 资金增减方法,用户信息改变方法在另一个类中实例化 UserAccount 对象并操作