JAVA_4-面向对象_第1页
JAVA_4-面向对象_第2页
JAVA_4-面向对象_第3页
JAVA_4-面向对象_第4页
JAVA_4-面向对象_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、第第4章章 面向对象技术面向对象技术 Java的面向对象编程的面向对象编程第第4章章 面向对象技术面向对象技术 计算机世界计算机世界概念世界概念世界现实世界现实世界实体实体抽象数据类型抽象数据类型类类对象对象抽象抽象转换转换抽象抽象实例化实例化第第4章章 面向对象技术面向对象技术 面向对象编程面向对象编程n 面向对象程序设计是使用类和对象类和对象将现实世界中真实的或抽象的实体实体在程序中建立模型模型。n 简单的说,面向对象编程(Object Oriented Programming,简称OOP)描述的是对象之间的相互作用对象之间的相互作用。n 面向对象编程与面向过程编程的区别区别:1.过程化程

2、序设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算先确定数据结构,再确定运算。2.面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。构造一个对象模型,将数据与方法组织在一起。第第4章章 面向对象技术面向对象技术 n面向对象的三大特征面向对象的三大特征1 封装:将数据和操作封装到类中2 继承:子类可以继承父类的属性和功能3 多态:操作名称多态(函数重载)、 同继承相关的多态第第4章章 面向对象技术面向对象技术 含义:对象的变量变量置于对象方法的包裹之中,对外对外隐藏隐藏。优点: 1.

3、1.模块化模块化:不同对象代码之间有一定独立,对象可以在系统中方便移动。 2.2.信息隐藏信息隐藏:保证修改对象信息时,不会对访问它的对象产生影响。 封封 装装第第4章章 面向对象技术面向对象技术 继继 承承子类:从某个特定类派生出来的类。子类:从某个特定类派生出来的类。父类:派生出某个特定类的类。父类:派生出某个特定类的类。子类继承父类的状态与方法。可以增加新的变量和方法。可以子类继承父类的状态与方法。可以增加新的变量和方法。可以重写重写(Override)(Override)继承来的方法。继承来的方法。第第4章章 面向对象技术面向对象技术 多多 态态如果一个类有很多子类,并且这些子类都重写

4、了父子类都重写了父类的某个方法类的某个方法,那么当子类对象的上转型对象在调用这个方法时就可能具有多种形态多种形态,称为多态多态。简而言之:对外一个接口,内部多种实现对外一个接口,内部多种实现。第第4章章 面向对象技术面向对象技术 对象对象 对象的状态对象的状态 对象的行为对象的行为p 我们可以把现实世界的一个具体事物抽象成一个对象。我们可以把现实世界的一个具体事物抽象成一个对象。例如校园里的一辆汽车。例如校园里的一辆汽车。p 描述对象:状态(描述对象:状态(state)【红色、宝马等红色、宝马等】和行为】和行为 【行驶、放音乐行驶、放音乐】。】。p 软件的对象概念是由现实世界对象抽象而来软件的

5、对象概念是由现实世界对象抽象而来 。把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现。p 对象对象由变量与相关的方法结合起来构成的。p 一个特定的对象称为实例实例。第第4章章 面向对象技术面向对象技术 类和对象类和对象p把相似的对象划归成一个类。对象是具体的对象是具体的,类是类是对相同或相似对象一些共同特征和行为的抽象抽象。例例如如汽车的设计图纸与一辆具体的汽车之间的关系。p在软件中,类 就是一个模板模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法)。p类是创建对象的模板模板,对象是类的实例实例。第第4章章 面向对象技术面向对象

6、技术 类定义:Class EmpInfoString name;String designation;String department;void print( ) System.out.println(name+“is”+designation+“at”+department);类和对象举例类和对象举例第第4章章 面向对象技术面向对象技术 对象的生成与使用:EmpInfo employee = new EmpInfo( ); = “ Robert Javaman”;employee.designation = “Manager”;employee.departmen

7、t = “Coffee shop”;employee.print( ); .类和对象举例类和对象举例第第4章章 面向对象技术面向对象技术 类的声明类的声明Example 1class People类体Example 2class 动物类体1 类名的第一个字母一般大写,且应符合标识符规定。2 类名应见名知意。当由几个“单词”合成类名时, 每个单词的首字母都应大写。第第4章章 面向对象技术面向对象技术 类体类体属性(变量)方法(函数)class 梯形 float 上底,下底,高,laderArea; float 计算面积() laderArea=(上底+下底)*高/2.0f; return lad

8、erArea; void 修改高(float h) 高=h; 第第4章章 面向对象技术面向对象技术 成员变量和局部变量成员变量和局部变量class people int boy; float a; void f() boolean cool; Workman zhangboy; class Workman double x; 1 在属性部分定义的变量称为成员变量,在方法体内定义的变量称为局部变量2 变量的类型可以为基本的数据类型也可以为引用数据类型第第4章章 面向对象技术面向对象技术 成员变量和局部变量成员变量和局部变量class A void f() int m=10,sum=0; if(m

9、9) int z=10; z=2*m+z; for(int i=0;im;i+) sum=sum+i; m=sum; z=i+sum; 1 成员变量成员变量在整个类中都有效,可以在本类的任何一个方法中使用成员变量2 局部变量局部变量从定义的位置开始到方法结束一直有效【m和sum】3 定义在复合语句(循环语复合语句(循环语句)中的局部变量句)中的局部变量作用域仅限于复合语句(循环语句)【z和i】第第4章章 面向对象技术面向对象技术 成员变量和局部变量成员变量和局部变量class Tom int x=90,y; void f() int x=3; y=x; 如果局部变量的名字与成员变量的名字相同,

10、则成成员变量被隐藏员变量被隐藏。如果确要在方法中使用同名的成员变量,应在其前面加上“this”关键字关键字。第第4章章 面向对象技术面向对象技术 应注意的问题应注意的问题class A int a=12; float b=12.56f;对成员变量的操作只能放在方法中。class A int a; float b; a=12; / b=12.56f; /第第4章章 面向对象技术面向对象技术 方法方法=方法声明方法体方法声明方法体返回值类型 方法名(参数列表)方法体第第4章章 面向对象技术面向对象技术 方法方法=方法声明方法体方法声明方法体1 返回值为void或某种数据类型;2 方法名一般用小写字

11、母方法名一般用小写字母。由多个单词合成的方法名从第二个单词以后每个单词的首字母大写。3 参数是传值的参数是传值的,方法调用不会改变作为参数的变量的值。4 当对象作为参数对象作为参数时,参数的值是该对象的引用,这时对象的内容可以在方法中改变,但是对象的引用不会改变。第第4章章 面向对象技术面向对象技术 Public class PassTestfloat ptValue;public void changeInt(int value)value = 55 ; public void changeStr(String value)value = new String(“different”); p

12、ublic void changeObjValue( PassTest ref)ref.ptValue = 99.0f; public static void main(String args )String str;int val;PassTest pt= new PassTest( );val = 11;pt.changeInt(val);System.out.println(“Int value is:” +val);str = new String(“hello”);pt.changeStr(str);System.out.println(“str value is:” +str);p

13、t.ptvalue = 101.0f ;pt.changeObjValue(pt);System.out.println(“pt value is:” +pt.ptValue);Int Value is:11Str Value is:hellopt value is:99.0f第第4章章 面向对象技术面向对象技术 方法重载方法重载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;

14、 double getArea(float x,float y,float z) return (x*x+y*y+z*z)*2.0; 名字相同,但参数的个数个数或者类型类型不同的方法称为方法重载。第第4章章 面向对象技术面向对象技术 构造方法构造方法1 构造方法名字必须同类名一一样样;2 构造方法没有返回值类型没有返回值类型;3 构造方法可以重载重载;4 如果在类定义中无构造方法,Java在编译时可缺省加入构可缺省加入构造方法造方法。 如 public Employee( ) ;5 一旦在类中有一个自己声明的构造方法,则缺省的构造方法将不被加到源程序中。class 梯形 float 上底,下底

15、,高; 梯形() 上底=60; 下底=100; 高=20; 梯形(float x,int y,float h) 上底=x; 下底=y; 高=h; 第第4章章 面向对象技术面向对象技术 对对 象象p创建对象p使用对象第第4章章 面向对象技术面向对象技术 创建对象创建对象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) Xiyo

16、ujiRenwu zhubajie; zhubajie=new XiyoujiRenwu(); 1 首先声明首先声明对象变量(对象引用);然后用同类型的对象实体为对象变量赋值。2 new XiyoujiRenwu()将产生一个XiyoujiRenwu类型的对象实体。 3 对象实体的本质是在内存里有一块空间专门存放该对象的信息。4 对象变量同对象实体的关系如同人的名字同人之间的关系。 第第4章章 面向对象技术面向对象技术 创建对象创建对象int x;x5;x:内存地址对象实体的地址XiyoujiRenwu zhubajie;zhubajie=new XiyoujiRenwu();zhubajie

17、:对象实体地址的地址对象实体5第第4章章 面向对象技术面向对象技术 对象创建与初始化过程对象创建与初始化过程执行new SomeClass() 的过程: 1 开辟内存空间,将成员变量的初始化: 数值型:0; 布尔型:false; 引用型:null; 字符串型:null; 2 显式初始化:执行类成员声明时带有的简单赋值表达式。 public class Initializedprivate int x = 5 ;private String name = “Fred”; 3 执行构造方法,进行对象的初始化。第第4章章 面向对象技术面向对象技术 使用对象使用对象class XiyoujiRenwu

18、 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(); zhubajie.height=12.3f; zhubajie.head=大头; zhubajie.speak(hello); 第第4章章 面向对象技术面向对象技术 1 区分两个对象区分两个对象是否为同一对象

19、的唯一依据是他们所占用的内存空间是否相同。2 如果类中显式地定义了显式地定义了构造函数构造函数,则产生对象实体时不能用默认的构造函数。应注意的几个问题应注意的几个问题class Point int x,y; Point(int a,int b) x=a; y=b; class A public static void main(String args) Point p1,p2; p1=new Point(10,10); p2=new Point(10,10); p1=p2; 第第4章章 面向对象技术面向对象技术 对象的回收对象的回收垃圾收集机制垃圾收集机制(garbage collection

20、):Java运行环境当确定某个对象不再被使用时,将其删除。一个对象在没有引用指向它时,可作为垃圾收集。垃圾搜集器垃圾搜集器:Java运行环境中的垃圾搜集器周期性地释放不用对象占用的空间。第第4章章 面向对象技术面向对象技术 C+:A *a=new A( );A *b=a;A *c=a;/a 使用完,将其删除delete a; Java :A a=new A( );A b=a;A c=a;/a 使用完,将其删除 a= null ; a b c b c(指针悬空)a b c b c垃圾收集机制垃圾收集机制第第4章章 面向对象技术面向对象技术 子类与父类子类与父类n 继承:用一种已有的类创建新类的机

21、制。n 子类与父类:由继承得到的类称为子类,被继承的类称为父类class 子类名 extends 父类名第第4章章 面向对象技术面向对象技术 子类与父类子类与父类1 子类除了可以“拥有”父类中的部分部分成员外,还可以定义自己特有的成员特有的成员。2 如果一个类没有使用“extends”关键字继承其他类,则默认是“ObjectObject”类的子类class 子类名 extends 父类名第第4章章 面向对象技术面向对象技术 1. 子类继承父类的属性、功能(方法),子类中只需只需声明特有的东西声明特有的东西。2. 带privateprivate修饰符的属性、方法是不能被继承的。3.3. 构造函数

22、构造函数不能被继承。4. 在方法中调用构造方法用this()this()。5. 调用父类的构造方法用super()super()。 super指向该关键字所在类的父类。6. Java是单继承单继承的,即只能从一个类继承,extends后类名只能有一个。单继承的优点是代码更可靠。子子 类类第第4章章 面向对象技术面向对象技术 子类的继承性子类的继承性class Father private int money; int weight; int getWeight() return weight; protected void setWeight(int w) weight=w; class So

23、n extends Father String hand; public void setHand(String hand) this.hand=hand; String getHand() return hand; 第第4章章 面向对象技术面向对象技术 class Grandson extends Son String foot; public void setFoot(String foot) this.foot=foot; String getFoot() return foot; 子类的继承性子类的继承性第第4章章 面向对象技术面向对象技术 public class Example3_

24、1 public static void main(String args) Son son=new Son(); Grandson grandson=new Grandson(); son.setWeight(67); son.setHand(一双大手); grandson.setWeight(25); grandson.setHand(一双小手); grandson.setFoot(一双小脚); System.out.println(儿子重量+son.getWeight(); System.out.println(孙子重量+grandson.getWeight(); System.out.

25、println(儿子的手+son.getHand(); System.out.println(孙子的手+grandson.getHand(); System.out.println(孙子的脚+grandson.getFoot(); 1、如果子类和父类在同一个包中,子类继承了父类中不不是是privateprivate的成员的成员,并且继承成员的访访问权限不变问权限不变。2、如果子类和父类不在同一个包不在同一个包中,子类只能继承父类中protected和和public类型的成员类型的成员,并且继承成员的访问权访问权限不变限不变。儿子重量:67孙子重量:25儿子的手:一双大手孙子的手:一双小手孙子的

26、脚:一双小脚第第4章章 面向对象技术面向对象技术 子类对象的构造过程子类对象的构造过程class A private int x; void setX(int x) this.x=x; int getX() return x; class B extends A double y=12; public void setY(int y) /this.y=y+x; 非法,子类没有继承x public double getY() rerurn y; 第第4章章 面向对象技术面向对象技术 子类对象的构造过程子类对象的构造过程public class E public static void main(

27、String arg) B b=new B(); b.setX(888); System.out.println(子类对象未继承的x的值是:+b.getX(); b.y=12.678; System.out.println(子类对象的实例变量y的值是:+b.getY();) 子类对象未继承的子类对象未继承的x x的值是的值是:888:888子类对象的实例变量子类对象的实例变量y y的值的值是是:12.678:12.678第第4章章 面向对象技术面向对象技术 子类对象的构造过程子类对象的构造过程1、当用子类的构造方法创建一个子类对象时,子类的构造方法总是先调用父类的某个构造方法。2、如果子类的构

28、造方法中没有明显地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。3、当用子类创建对象时,不仅子类中声明的成员变量被分配内存,而且父类的成员变量也全都分配了内存。(被子类继承的方法中可能有对未被子类继承成员变量的操作)第第4章章 面向对象技术面向对象技术 class MealMeal()System.out.print(Meal();class BreadBread()System.out.print(Bread();class CheeseCheese()System.out.print(Cheese();class LettuceLettuce()System.out.pr

29、int(Lettuce();class Lunch extends MealLunch()System.out.print(Lunch();class PortableLunch extends LunchPortableLunch()System.out.print(PortableLunch();public class Sandwich extends PortableLunchprivate Bread b=new Bread();private Cheese c=new Cheese();private Lettuce l=new Lettuce();public Sandwich(

30、)System.out.println(Sandwich();public static void main(String args)new Sandwich();Meal()Lunch()PortableLunch()Bread()Cheese()Lettuce()Sandwich()第第4章章 面向对象技术面向对象技术 成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写1 如果子类中定义了和父类同名的成员变量,子类就隐藏了继承的成员变量。2如果子类中定义了和父类相同方法(方法的名字、返回类型、参数个数和类型),子类就隐藏了继承的成员方法。如果子类想使用被隐藏的方法,必须使用super关键

31、字。第第4章章 面向对象技术面向对象技术 super关键字关键字1、使用super关键字可以使用父类的构造函数使用父类的构造函数。class Student int number;String name; Student() Student(int number ,String name) this.number=number; =name; System.out.println(I am +name+my number is +number); 第第4章章 面向对象技术面向对象技术 class UniverStudent extends Student boolean 婚否

32、; UniverStudent(int number,String name,boolean b) super(number,name); 婚否=b; System.out.println(婚否=+婚否); public class Example3-10 public static void main(String args) UniverStudent zhang=new UniverStudent(9901,和晓林,false); 1 子类不继承父类的构造函数;父类的构造函数也只能在子类只能在子类的构造函数中出现的构造函数中出现;2 父类的构造函数显式或隐式(自动调用super()sup

33、er())作为子类构造函数的第一条第一条语句;I am 和晓林和晓林my number is 9901婚否婚否=false第第4章章 面向对象技术面向对象技术 2、使用super关键字可以使用被子类隐藏的成员变量或方法被子类隐藏的成员变量或方法。class Sum int n; double f() double sum=0; for(int i=1;i=n;i+) sum=sum+i; return sum; class Average extends Sum double n; /覆盖 double f() /覆盖 double c; super.n=(int)n; c=super.f()

34、; return c+n; double g() double c; c=super.f(); return c-n; 第第4章章 面向对象技术面向对象技术 public class Example3-11 public static void main(String args) Average aver=new Average(); aver.n=100.5678; double result1=aver.f(); double result2=aver.g(); System.out.println(result1=+result1); System.out.println(result2

35、=+result2); result1=5150.5678result2=4949.4322将左侧代码更改为:double result2=aver.g();double result1=aver.f();运行结果如下: result1=5150.5678result2=-100.5678第第4章章 面向对象技术面向对象技术 方法重写方法重写class A float f(int x,int y) return x+y; public void g() System.out.println(I am a student); class B extends A float f(int x,int

36、 y) return x*y; public class E public static void main(String args) B b=new B(); float result=b.f(3,5); System.out.println(result); b.g(); 15.0I am a student第第4章章 面向对象技术面向对象技术 返回值类型返回值类型必须与原来方法的返回值完全相同。方法的访问权限不能缩小访问权限不能缩小。不能抛出新的例外。方法重写的规则方法重写的规则第第4章章 面向对象技术面向对象技术 对象的上转型对象对象的上转型对象1、当用子类创建一个对象,并将这个对象(

37、的引用)赋值给一个父类对象的引用时,称这个父类对象的引用是子类对象的上转型对象。2、上转型对象不能操作子类新增的成员,但可以操作子类继承或被隐藏的成员变量,也可以使用子类继承或重写后的方法。3、可以将对象的上转型对象再强制转换为一个子类对象,这时,该子类对象又具备了子类所有的属性和功能。4、不能将对象的上转型对象和父类对象混淆。A a;B b=new B();a=b;class B extends A第第4章章 面向对象技术面向对象技术 对象的上转型对象对象的上转型对象class 类人猿 double m=12.58; void crySpeak(String s) System.out.pr

38、intln(s); class People extends 类人猿char m=A;/隐藏 int n=60; void computer(int a,int b) int c=a+b; System.out.println(a+加+b+等于+c); void crySpeak(String s)/重写 System.out.println(m+*+s+*+m); 第第4章章 面向对象技术面向对象技术 class E public static void main (String args) People wang=new People(); 类人猿 monkey=wang; /monkey

39、是wang的上转型对象 monkey.crySpeak(I love this game); /monkey.n=100; 非法 /puter(12,19); 非法 System.out.println(monkey.m); People zhang=(People)monkey; /把上转型对象强制转化为子类的对象 puter(55,33); zhang .m=T; System.out.println(zhang.m); A A* * *I love this gameI love this game* * *A A12.5812.585555加加3333等于等于8888T T第第4章章

40、面向对象技术面向对象技术 多多 态态如果一个类有很多子类,并且这些子类都重写了父类的某个方法,那么当子类子类对象的上转型对象在调用这个方法时就可能具有多种形态,称为多态多态。class 动物 void cry() class 狗 extends 动物 void cry() System.out.println(这是狗的叫声:汪汪.汪汪); 第第4章章 面向对象技术面向对象技术 多多 态态class 猫 extends 动物 void cry() Syatem.out.println(这是猫的叫声:喵喵.喵喵); class E public static void main (String a

41、rgs) 动物 dongwu=new狗(); dongwu.cry(); dongwu=new猫(); dongwu.cry(); 第第4章章 面向对象技术面向对象技术 多多 态态利用多态进行程序设计的好处在于:可以体现程序设计的“开闭”原则,即对扩展开放,对修改关闭,增强代码的可维护性。Geometry.java/多面体public abstract class Geometry public abstract double getArea();Lader.javapublic class Lader extends Geometry double a,b,h; Lader(double a

42、,double b,double h) this.a=a;this.b=b;this.h=h; public double getArea() return(1/2.0)*(a+b)*h); 第第4章章 面向对象技术面向对象技术 Circle.javapublic class Circle extends Geometry double r; Circle(double r) this.r=r; public double getArea() return(3.14*r*r); Cone.javapublic class Cone/体积 Geometry bottom; double heig

43、ht; Cone (Geometry bottom,double height) this.bottom=bottom; this.height=height; void changeBottom(Geometry bottom) this.bottom=bottom; public double getVolume() return (bottom.getArea()*height)/3.0; 第第4章章 面向对象技术面向对象技术 public class Example3_9 public staticvoid main(String args) Cone zui; Geometry tu

44、xing; tuxing=new Lader(2.0,7.0,10.7); System.out.println(梯形的面积+tuxing.getArea(); zui=new Cone(tuxing,30); System.out.println(梯形底的锥的体积+zui.getVolume(); tuxing=new Circle(10); System.out.println(半径是10的圆的面积+tuxing.getArea(); zui.changeBottom(tuxing); System.out.println(圆形底的锥的体积+zui.getVolume(); 第第4章章 面向对象技术面向对象技术 Instanceof :测试对象类型:测试对象类型 例:Empolyee a = new Manager(); 则 a instanceof Manager 为true; 例:public void method( Employee e) if (e instanceof Manager)Manager m = (Mana

温馨提示

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

评论

0/150

提交评论