JAVA 面向对象编程.ppt
《JAVA 面向对象编程.ppt》由会员分享,可在线阅读,更多相关《JAVA 面向对象编程.ppt(69页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第三章第三章 Java与面向对象技术与面向对象技术3.1 面向对象的概念面向对象的概念3.2 Java中的类、方法和变量中的类、方法和变量3.3 Java名字空间及访问规则名字空间及访问规则3.4 Java中的抽象类、接口和程序包中的抽象类、接口和程序包3.5 对象的构造方法对象的构造方法 面向对象技术主要围绕以下几个概念:对象、类、子类、继承性、封装、多态性。3.1 面向对象的概念面向对象的概念 对象有两个层次的概念:现实生活中对象指的是客观世界的实体;程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。变量变量方法方法3.1 面向对象的概念面向对象的概
2、念对象对象现实生活中的对象可以将现实生活中的对象可以将现实生活中的对象经过抽象,映射为程序中经过抽象,映射为程序中的对象。对象在程序中是的对象。对象在程序中是通过一种抽象数据类型来通过一种抽象数据类型来描述的,这种抽象数据类描述的,这种抽象数据类型称为类(型称为类(Class)。)。Class Car int color_number;int door_number;int speed;void brake()void speedUp()void slowDown()抽象数据类型3.1 面向对象的概念面向对象的概念对象对象q 类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操
3、作。在面向对象的程序设计中,类是程序的基本单元。q 相似的对象可以归并到同一个类中去,就像传统语言中的变量与类型关系一样。q 程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。3.1 面向对象的概念面向对象的概念类类Car car1;Car car2;Car carN;3.1 面向对象的概念面向对象的概念类类n变量:指对象所具有的状态。n方法:指对象的功能单元。n消息软件对象通过相互间传递消息来相互作用和通信,一个消息由三部分组成:1.接收消息的对象 2.接收对象要采取的方法 3.方法需要的参数对象对象B对象对象 A消息消息3.1 面向对象的概念面向对象的
4、概念类类n一个例子n在程序中所操作的对象是类的一个实例。n创建一个对象:Hello obj=new Hello();n调用方法:obj.showString();调用对象的方法相当于给对象发送消息,收到消息的对象通过改调用对象的方法相当于给对象发送消息,收到消息的对象通过改变自身的状态或者向其它对象发送消息来响应消息。变自身的状态或者向其它对象发送消息来响应消息。class Hello private String s;public void showString()System.out.println(s);public void changeString(String str)s=str;
5、变量方法showString()方法changeString()3.1 面向对象的概念面向对象的概念类类n为什么要使用类?n采用简单数据类型表示现实世界中概念存在很大的局限性。例如:采用int型数据表示一个日期概念,需要使用3个变量:int day,month,year;n如果要表示2个人的生日,就要使用6个变量n并且在使用中必须时刻注意三者的联系和约束关系n同时在使用日期概念时要同时对三个变量进行访问 n使用类可以把现实问题中的对象映射为程序中的一个整体类。3.1 面向对象的概念面向对象的概念类类类中不但有变量,还有与之相关的操作所定义的方法。将变量和方法封装在一个类中,可以对成员变量进行隐
6、藏对成员变量进行隐藏,外部对类成员的访问都通过方法进行,能够保护类成员不被非法修改保护类成员不被非法修改。class BirthDate public int day,month,year;public int tomorrow()BirthDate mybirth,yourbirth;BirthDate date;已知当前日期对象,求第2天的日期对象:date.day=date.day+1;如果date.day已经为31,操作结果是非法状态。可以定义一个成员方法tomorrow(),求第2天的日期对象。外部要获得当前日期的后一天时,只要调用:date.tomorrow();3.1 面向对象的
7、概念面向对象的概念类类n封装把对象的所有组成部分组合在一起私有数据私有数据 方法方法 方法方法数据数据对象对象A对象对象B公有数据公有数据封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。3.1 面向对象的概念面向对象的概念封装封装子类是作为另一个类的扩充或修正而定义的一个类。bicycle(super class)Mountain bikesRacing bikesTandem bikessub class3.1 面向对象的概念面向对象的概念子类子类继承是子类利用父类中定义的方法和变量,就像它们属于子类本身一样。class Car in
8、t color_number;int door_number;int speed;public void push_break()public void add_oil()class Trash_Car extends Car double amount;public void fill_trash()3.1 面向对象的概念面向对象的概念继承继承n方法的覆盖覆盖使得在子类中可以重新定义父类中已有的方法,从而体现出子类自己的行为。class Car int color_number;int door_number;int speed;public void push_break()speed=0
9、;public void add_oil()class Trash_Car extends Car double amount;public void fill_trash()public void push_break()speed=speed 10;3.1 面向对象的概念面向对象的概念方法的覆盖方法的覆盖(多态性多态性)重载指得是在同一个类中至少有两个方法用同一个名字,但有不同的参数。类类void show(int int_num)void show(double double_num)void show(int int_num,float float_num)1231.23123,1.2
10、33.1 面向对象的概念面向对象的概念方法的重载(多态性)方法的重载(多态性)n例如对于StringBuffer类,它有方法n public StringBuffer append(inti);n public StringBuffer append(doubled);n public StringBuffer append(Strings);n public StringBuffer append(charstr,intoffset,intlen);n类、方法、变量定义的语法规范n对象的创建和使用n继承、覆盖、重载、多态等概念n内嵌类(inner class)3.2 Java中的类、方法和变
11、量中的类、方法和变量3.2 Java中的类、方法和变量中的类、方法和变量类定义的语法规范类定义的语法规范n类的严格定义及修饰字类的修饰字:public abstract|final 缺省方式为缺省方式为 friendly类的修饰字类的修饰字 class 类名称类名称 extends 父类名称父类名称implements 接口名称列表接口名称列表 变量定义及初始化;变量定义及初始化;方法定义及方法体;方法定义及方法体;类体,其类体,其中定义了该类中所有中定义了该类中所有的变量和该类所支持的方法,的变量和该类所支持的方法,称为成员变量和成员方法。称为成员变量和成员方法。变量修饰字变量修饰字 变量数
12、据类型变量数据类型 变量名变量名1,变量名变量名2=变量初值变量初值;变量的定义及修饰字public|protected|private static final transient volatile成员变量的类型可以是Java中任意的数据类型,包括简单类型,类,接口,数组。在一个类中的成员变量应该是唯一的。3.2 Java中的类、方法和变量中的类、方法和变量变量定义的语法规范变量定义的语法规范方法修饰字方法修饰字 返回类型返回类型 方法名称方法名称(参数参数1,参数参数2,)throws exceptionList (statements;)/方法体:方法的内容方法体:方法的内容方法的定义及
13、修饰字public|protected|private static final|abstract native synchronized 返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。参数的类型可以是简单数据类型,也可以是引用数据类型(数组、类或接口),参数传递方式是值传递。方法体是对方法的实现。它包括局部变量的声明以及所有合法的Java指令。局部变量的作用域只在该方法内部。3.2 Java中的类、方法和变量中的类、方法和变量变量定义的语法规范变量定义的语法规范class A static void change(String s,StringBuffe
14、r sb)s=“aaaa”;/此语句不起作用此语句不起作用 sb.setLength(0);sb.append(“aaaa”);public static void main(String args)String s=“bbbb”;StringBuffer sb=new StringBuffer(“bbbb”);change(s,sb);System.out.println(s);System.out.println(sb);输出结果:bbbbaaaa3.2 Java中的类、方法和变量中的类、方法和变量参数的传递方式是值传递参数的传递方式是值传递一个简单的类一个简单的类class Car in
15、t car_number;void set_number(int car_num)car_number=car_num;void show_number()System.out.println(“My car No.is:”+car_number);class CarDemo public static void main(String args)Car Democar=new Car();DemoCar.set_number(3838);DemoCar.show_number();My car No.is:38383.2 Java中的类、方法和变量中的类、方法和变量一个简单的类一个简单的类(
16、1)对象的生成 通过new操作符生成一个对象;例如:Car demoCar;demoCar=new Car();(2)对象的构造过程 为对象开辟空间,并对对象的成员变量进行缺省的初始化;对成员变量进行指定的初始化;调用构造方法。3.2 Java中的类、方法和变量中的类、方法和变量对象对象(3)对象的使用 对象的使用是通过一个引用类型的变量来实现,包括引用对象的成员变量和方法,通过运算符 可以实现对变量的访问和方法的调用。例如:BirthDate date;int day;day=date.day;/引用date的成员变量daydate.tomorrow();/调用date的方法tomorrow
17、()3.2 Java中的类、方法和变量中的类、方法和变量对象对象 类的继承class Car int car_number;void set_number(int car_num)car_number=car_num;void show_number()System.out.println(“My car No.is:”+car_number);3.2 Java中的类、方法和变量中的类、方法和变量继承继承class TrashCar extends Car int capacity;void set_capacity(int trash_car_capacity)capacity=trash_
18、car_capacity;void show_capacity()System.out.println(“My capacity is:”+capacity);3.2 Java中的类、方法和变量中的类、方法和变量继承继承Car是父类,是父类,TrashCar是子类。是子类。TrashCar中继承了中继承了Car中的两个方法,同时又增加了两个新方法。中的两个方法,同时又增加了两个新方法。class CarDemo public static void main(String args)TrashCar demoTrashCar=new TrashCar();demoTrashCar.set_nu
19、mber(3949);demoTrashCar.show_number();demoTrashCar.set_capacity(20);demoTrashCar.show_capacity();继承的方法继承的方法新增加的方法新增加的方法3.2 Java中的类、方法和变量中的类、方法和变量继承继承q 继承性是面向对象程序设计语言的另一基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。Java中不支持多重继承。通过在类的声明中加入extends子句来创建一个类的子类:class SubClass extends SuperClassq
20、 如果缺省extends子句,则该类为java.lang.Object的子类。q 子类可以继承父类中访问权限设定为public、protected、default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。3.2 Java中的类、方法和变量中的类、方法和变量继承继承n何时选择继承?一个很好的经验:“B是一个A吗?”如果是则让B做A的子类.常犯的错误常犯的错误A有一个有一个B吗吗?例如让汽例如让汽车轮子成为汽车的子类是错误的车轮子成为汽车的子类是错误的3.2 Java中的类、方法和变量中的类、方法和变量继承继承ShapePointCircleCylinder在更多的时
21、候,组合(聚集)组合(聚集)关系比继承更能使系统具有高度的灵活性,可维护行,并且提高系统的可重用性。ShapePointCircleCylinder3.2 Java中的类、方法和变量中的类、方法和变量继承继承 类方法的覆盖 方法覆盖即指在子类中重新定义父类中已有的方法。class Car int color_number;int door_number;int speed;public void push_break()speed=0;public void add_oil()class Trash_Car extends Car double amount;public void fill_
22、trash()public void push_break()speed=speed 10;3.2 Java中的类、方法和变量中的类、方法和变量覆盖覆盖 覆盖方法的调用 对于重写的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。public class DemoCarpublic static void main(String args )Car aCar=new Trash_Car();aCar.push_break();在这里,类Trash_Car中的push_break()方法将被调用。3.2 Java中的类、方法和变量中的类、方法和变量覆盖覆盖方法覆盖时应遵循
23、的原则 (1)覆盖后的方法不能比被覆盖的方法有更严格的访问权限。(2)覆盖后的方法不能比被覆盖的方法产生更多的例外。3.2 Java中的类、方法和变量中的类、方法和变量覆盖覆盖 类方法的重载 方法重载即指多个方法可以享有相同的名字。但是这些方法的参数必须不同,或者是参数个数不同,或者是参数类型不同。q 例如,要打印不同类型的数据,int,float,String,不需要定义不同名的方法:printInt(int);printFloat(float);printString(String)。q 利用方法重载,只需要定义一个方法名:println(),接收不同的参数:println(int);pr
24、intln(float);println(String);n StringBuffer vs.ResultSet3.2 Java中的类、方法和变量中的类、方法和变量重载重载 多态性类方法的重载是一种多态性。除此之外,多态性还可以是指在程序中需要使用父类对象的地方,都可以用子类对象来代替。例如:public class Employee extends Objectpublic class Manager extends Employee则:Employee e=new Manager();/合法语句n 通过 instanceof 可以判断父类引用所引用的对象实例的实际类型。3.2 Java中的
25、类、方法和变量中的类、方法和变量多态性多态性可以用方法来实现对成员变量的隐藏:q 设置变量方法:setVariable()q 获取变量方法:getVariable()class Sampleprotected int x;void setX(int var)x=var;int getX()return x;3.2 Java中的类、方法和变量中的类、方法和变量成员变量的隐藏成员变量的隐藏在Java语言中,提供了操作符instanceof用来判断对象是否属于某个类的实例。public void method(Employee e)if (e instanceof Manager)/do somet
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 面向对象编程 面向 对象 编程
限制150内