02_Java的面向对象编程.ppt_第1页
02_Java的面向对象编程.ppt_第2页
02_Java的面向对象编程.ppt_第3页
02_Java的面向对象编程.ppt_第4页
02_Java的面向对象编程.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java的面向对象编程,面向对象编程概述,简单的说,面向对象编程(Object Oriented Programming,简称OOP)描述的是对象之间的相互作用。 面向对象编程与面向过程编程的区别: 过程化程序设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算。 面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。,对象 对象的状态 对象的行为,我们可以把现实世界的事物抽象成对象。 对象一般都有两个特征:状态(state)和行为(behavior)。 软件的对象概念是由现实世界对象抽象

2、而来 。把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现。,类和对象,把相似的对象划归成一个类。 在软件中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法)。 类是创建对象的模板,对象是类的实例。,什么是类,什么是类? 类是描述对象的“基本原型”,它定义一种对象所能拥有的数据和能完成的操作,在面向对象的程序设计中,类是程序的基本单元。 组成类的元素:变量,方法,消息,一个列子:什么是类,class Hello/类名 Public String s;/变量 public void showString ()/方法 S

3、ystem.out.println(s); public void changeString(String str)/有参数的方法 s=str; return s; ,变量,方法,消息,变量:即指对象的所知道的状态 方法:指对象的功能单元。 消息:软件对象通过相互间传递消息来相互 作用和通信 组成消息的三个部分: 1. 接受消息的对象 2. 要完成方法的名字 3. 方法需要的参数,面向对象程序设计,从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种数据类型,这种数据类型就是对象类型 。所以我们可以使用类名称来声明对象变量。 声明对象变量之后,还不能使用对象。必须用运算

4、符new创建对象实体之后,才能使用对象。,面向对象编程的难点,掌握面向对象的困难之处在于思路的转换。 我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。,一个简单的例子,编写一个驾驶汽车的方法 面向过程的程序设计: 编写一个方法,void drivecar(); 面向对象的程序设计: 将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类Car,类中有一个方法void drive(),用Car这个类实例化一个具体的对象car,调用:car.drive()。,一个简单的例子,class Car Public String car_color; Public voi

5、d drivecar()/方法 Car_color = “red”; Public static void main(String args) Car aaa = new Car();/用Car这个类实例化一个具体的对象aaa Aaa. Drivecar();/调用: Aaa.drive() ,类的构造方法,构造方法的名字和类名相同,并且没有返回值。 构造方法主要用于为类的对象定义初始化状态。 我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例。 Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。

6、,一个例子:类的构造方法,class Car car()/构造方法 Car_color = “red”; System.out.print(car_color); Public static void main(String args) Car aaa = new Car();/用Car这个类实例化一个具体的对象aaa ,new关键字的作用,为对象分配内存空间。 引起对象构造方法的调用。 为对象返回一个引用。 Car car = new Car();/用Car这个类实例化一个具体的对象car,缺省构造方法,当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员变量。 各种数据类型的默

7、认值为: 数值型0 booleanfalse char0 对象null,方法的重载(overload),重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。,class Test void receive(int i) void receive(int x, int y) void receive(double d) void receive(String s) ,一个例子:方法的重载,class Test public void receive(String i) /方法(1) System.out.print(i); Public void receive(int

8、 x, int y) /方法(2) System.out.print(x,y); Public void receive(int x, int y,int z) /方法(3) System.out.print(x,y,z); Z = x+y; System.out.print(z); ,特殊变量this,this变量代表对象本身 当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量。 使用this简化构造函数的调用。,一个例子:特殊变量this,class Test Public String color; pub

9、lic void receive(String a) /方法 Color = “black”; System.out.print(Color ); This.color = a;/使用特殊变量this System.out.print(color); ,特殊变量this,关于实例方法和实例数据成员的进一步说明 一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存在着一份拷贝。this变量允许相同的实例方法为不同的对象工作。每当调用一个实例方法时,this变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与thi

10、s所代表的对象的特定数据建立关联。,关键字static,通常,类成员必须通过它的类的对象访问.但是,可以创建这样一个成员,它能够被它自己使用,而无需引用一个特殊的实例.要创建这样一个成员,在它的生命前面加上关键字STATIC即可,当声明一个成员为STATIC时,可以在类的任何对象创建之前访问它,而无需引用任何对象.也可以将方法和变量都声明成为STATIC.STATIC成员的最常见的例子是MAIN()方法,因为在程序开始执行时必须调用MAIN().,关键字static,被声明为STATIC的变量本质上是全局变量. 声明为STATIC的方法有几天限制: 1,他们仅仅可以调用其他STATIC方法 2

11、,他们只能访问STATIC数据 3,他们不能以任何方式引用THIS或SUPER,一个例子:关键字static,Class UserStatic Static int a = 3; Static int b; Static void testStatic(int x) System.out.print(x); System.out.print(a); System.out.print(b); Public static void main(string args) testStatic(42); ,常量的定义,使用关键字final定义常量,例如: final double PI=3.141592

12、6; 作为一种约定,在定义常量时,通常采用大写形式。 final常量可以在声明的同时赋初值,也可以在构造函数中赋初值。 为了节省内存,我们通常将常量声明为静态的(static)。,一个例子:常量,Class TestFinal Public Final int AAA = 3;/常量 Public Final String BBB = “常量”; /常量 Static void testFinal () System.out.print(AAA ); System.out.print(BBB ); Public static void main(string args) testFinal (

13、); ,一个例子:常量,理解继承是理解面向对象程序设计的关键。 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。 在Java中,不允许多继承。,class Car int color_number; int door_number; int speed; push_break() add_oil() ,class Trash_Car extends Car double amount; fill_trash() ,方法的覆盖(override),在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖。 覆

14、盖发生在子类与父类之间。,class Car int color_number; int door_number; int speed; push_break() speed=0; add_oil() ,class Trash_Car extends Car double amount; fill_trash() push_break() speed=speed-10; ,一个例子:方法的覆盖,class Car int color_number; int door_number; int speed; push_break() speed=0; add_oil() ,class Trash_

15、Car extends Car double amount; fill_trash() push_break() speed=speed-10; ,特殊变量super,特殊变量super,提供了对父类的访问。 可以使用super访问父类被子类隐藏的变量或覆盖的方法。 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。,特殊变量super,super有两种通用形式。第一种调用超类的构造函数。第二种用来访问被子类的成员隐 藏的超类成员,一个例子:特殊变量super,class BoxWeight extends Box doubl

16、e weight; super() BoxWeight(double w, double h, double d, double m) super(w, h, d); weight = m; ,多态性,通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。,void show(int int_num),void show(double double_num),void show(nit nit_ um, float float_um),123,1.23,123,1.23,类,一个例子:多态性,class Test public void receive(String i) /

17、方法(1) System.out.print(i); Public void receive(int x, int y) /方法(2) System.out.print(x,y); Public void receive(int x, int y,int z) /方法(3) System.out.print(x,y,z); Z = x+y; System.out.print(z); ,抽象类,有些情况下,你希望定义一个超类,该超类定义了一种给定结构的抽象但是不提供任 何完整的方法实现。也就是说,有时你希望创建一个只定义一个被它的所有子类共享的通 用形式,由每个子类自己去填写细节。这样的类决定了

18、子类所必须实现的方法的本性。这 类情形下一种可能发生的情况是超类不能创建一个方法的有意义的实现。,抽象类,你可以通过指定abstract类型修饰符由子类重载某些方法。这些方法有时被作为子类责 任(subclasser responsibility)引用,因为它们没有在超类中指定的实现。这样子类必须重 载它们它们不能简单地使用超类中定义的版本。声明一个抽象方法,用下面的通用形 式: abstract type name(parameter-list);,一个例子:抽象类,abstract class A abstract void callme(); void callmetoo() Syste

19、m.out.println(This is a concrete method.); ,一个例子:抽象类,class B extends A void callme() System.out.println(Bs implementation of callme.); class AbstractDemo public static void main(String args) B b = new B(); b.callme(); b.callmetoo(); ,注意程序中声明A的对象。刚刚讲过,实例化一个抽象类是不可能的。另外一点要注 意:类A实现一个具体的方法callmetoo( )。这是完全可接受的,抽象类可以包括它们合适的 很多实现。,Object类,有一种由Java定义的特殊的类Object。所有其他的类都是Object的子类。也就是说, Object是所有其他类的超类。这意味着一个Object类型的引用变量可以引用其他任何一个类 的对象。同样,因为数组像类一样执行,Object类型变量可以引

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论