JAVA程序设计PPT教学课件-第2章 Java的面向对象特征.ppt_第1页
JAVA程序设计PPT教学课件-第2章 Java的面向对象特征.ppt_第2页
JAVA程序设计PPT教学课件-第2章 Java的面向对象特征.ppt_第3页
JAVA程序设计PPT教学课件-第2章 Java的面向对象特征.ppt_第4页
JAVA程序设计PPT教学课件-第2章 Java的面向对象特征.ppt_第5页
免费预览已结束,剩余60页可下载查看

下载本文档

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

文档简介

1,第2章 java的面向对象特征,2,本章导读,面向对象的概念和特征 java中的类和对象 java中的继承和多态 访问权限,3,本章导读,面向对象的概念和特征 java中的类和对象 java中的继承和多态 访问权限,4,面向对象的特征,封装 将数据(属性)和对数据的操作(功能)封装在一起 成员变量,成员方法,类 继承 子类可以继承父类的属性和功能,同时又可以增加子类独有的属性和功能 多态 多个操作具有相同的名字,但是接受的消息类型必须不同 同一个操作被不同类型的对象调用时产生不同的行为,5,本章导读,面向对象的概念和特征 java中的类和对象 java中的继承和多态 访问权限,6,java中的类和对象,(1)类的基本结构 (2)构造方法 (3)对象的创建和使用 (4)成员变量 (5)成员方法 (6)方法过载(重载) (7)this关键字,7,(1)类的基本结构,class student int age; boolean gender; float height; float weight; public float getweight() return weight; public void setweight(float givenweight) weight=givenweight; ,类声明,类体,成 员 变 量,成 员 方法,8,(1)类的基本结构,类名一般遵守下列习惯 由一个单词组成时,类名的首字母使用大写 由几个单词组成时,每个单词的首字母要大写 变量名和方法名一般遵守下列习惯 由一个单词组成时,要用小写 由几个单子组成时,第一个单词的首字母小写,其余单词的首字母大写,9,(2)构造方法,类创建对象时,需要使用构造方法完成对象的初始化工作 构造方法的名称必须与类名相同 构造方法没有类型 一个类中可以有若干个构造方法(名称相同),但是构造方法的参数必须不同 如果类中没有构造方法,系统为类定义一个默认的构造方法,该构造方法没有参数,类体为空,10,class circle double radius=10.0; circle( ) /无参构造方法 circle(double givenradius)/有参构造方法 radius=givenradius; double getarea( ) return 3.1416*radius*radius; double get girth( ) return 2.0*3.1416*radius; ,如果类定义中显式地给出了构造方法,系统就不会再提供默认的构造方法 例如,circle类中如果只定义了构造方法circle(double givenradius),则类对象无法调用构造方法circle(),11,(3)对象的创建和使用, 对象的声明 类的名字 对象名字; circle acircle; acircle是一个空对象,它不能访问成员变量和成员方法 创建对象 对象名=new 构造方法名(参数列表) acircle=new circle( ); acircle=new circle(5.0); 也可以把声明对象和创建对象合在一起进行 circle acircle=new circle(6);,12,(3)对象的创建和使用, 对象的使用 通过使用运算符“.”,对象可以实现对自己的成员变量和成员方法的访问 对象名.成员变量 对象名.成员方法,13,(4)成员变量,成员变量分为两种 实例变量 不用关键字static修饰 一个类中不同对象的实例变量将被分配不同的存储空间 只能通过对象访问实例变量 静态变量(类变量) 用关键字static修饰 一个类中所有对象的某个静态变量被分配同一个内存,所有对象共享这个静态变量 可以通过类名访问静态变量,也可以通过某个对象访问静态变量,14,(4)成员变量,class circle static double pi; /类变量 double radius; /实例变量 circle.pi=3; circle circle1=new circle(); circle1.radius=10; circle circle2=new circle(); circle2.radius=100;,testvariable.java(p46,程序2-2),15,(4)成员变量,final成员变量 如果一个成员变量修饰为final,就是常量 常量的名字习惯用大写字母 final int max=100; final修饰的成员变量不占用内存,声明时必须初始化 如果final变量是简单类型,则其值不能发生变化 如果final变量是复合类型,则其指向对象的引用不能发生变化,16,(4)成员变量,class tom final int max=100; /实例final成员变量 static final int min=20; /静态final成员变量 class example public static void main(string args ) system.out.println(tom.min); tom cat=new tom(); int x=tom.min+cat.max; system.out.println(x); ,17,(5)成员方法,构造方法 供类创建对象时使用,给出类所创建的对象的初始状态 对象不可以调用构造方法 一般方法 方法声明和方法体 方法类型 方法名(参数列表) 方法体的内容 ,方法声明,方法体,18,(5)成员方法, 实例方法和类方法 实例方法:方法声明中不用static修饰,必须通过对象来调用 类方法(静态方法):方法声明中用static修饰,可以通过类名调用,19,(5)成员方法, 实例方法和类方法 class a float a,b; void sum(float x,float y) /实例方法 a=max(x,y); /调用类方法 b=min(x,y); /调用实例方法 static float getmaxsqrt(float x,float y) /类方法 return max(x,y)*max(x,y); /调用类方法 static float max(float x,float y) /类方法 return xy?x:y; float min(float x,float y) /实例方法 return xy?:y; ,20,(5)成员方法, 实例方法和类方法 class computer double x,y; static double max(double a,double b) return ab?a:b; class lianxi1 public static void main(string args ) double max=computer.max(12,45); system.out.println(max); ,如果只想使用类computer中的max方法,就没必要创建对象。如果创建对象,实例变量x和y就要被分配内存,造成浪费。,用类名调用类方法,21,(5)成员方法, 参数传值 基本数据类型参数的传值 实参和形参占有不同的内存空间,形参的改变不影响实参 实参的级别要低于形参的级别 举例 p50,程序2-5(testbasicparameter.java),22,(5)成员方法, 参数传值 引用类型参数的传值 引用类型数据包括对象、数组以及后面将要学习的接口和泛型等 实参和形参指向共同的内存 改变形参引用的实体,会导致实参引用的实体发生同样的变化 举例 p51,程序2-6(testclassparameter.java),23,(6)方法过载(重载),方法过载是多态性的一种,是指一个类中可以有多个方法具有相同的名字,但是,参数数量不同或者参数类型不同 方法的类型和参数的名字不参与比较 举例 p53,程序2-7(testoverload.java),24,(7)this关键字,this可以出现在实例方法和构造方法中,但是不可以出现在类方法中。 在构造方法中使用this 在实例方法中使用this 使用this区分成员变量和局部变量(在这里,局部变量是指在成员方法的参数列表或者在方法体中定义的变量),(7)this关键字, 在构造方法中使用this:代表使用该构造方法所创建的对象 public class tom int leg; tom(int n) /构造方法 leg=n; this.cry(); /this可以省略,等价于“cry();” void cry() system.out.println(“tom有”+leg+“条腿”); public static void main(string args ) tom cat=new tom(4); /调用构造方法tom时,this就是对象cat,(7)this关键字, 在实例方法中使用this:代表使用该方法的当前对象,this可以省略 class circle double pi=3.1416; double radius; double computediameter() return 2*this.radius; double computegirth() double girth=this.pi*putediameter(); ,this.成员变量,this.成员方法,27,(7)this关键字, 使用this区分成员变量和局部变量 如果成员变量和局部变量名称相同,则成员变量被隐藏,即成员变量在方法内暂时失效 如果想在方法中使用成员变量,对于实例方法,应使用“this.成员变量”,对于类方法,应使用“类名.成员变量” this不能省略,28,(7)this关键字, 使用this区分成员变量和局部变量,class tom int x=188,y; /成员变量 void f() int x=3; /局部变量 y=x; /y的值是3,不是188 ,class tom int x=188,y; void f() int x=3; y=this.x; /y的值是188 ,29,(7)this关键字, 使用this区分成员变量和局部变量 class t float sizea; /成员变量:实例变量 static int count; /成员变量:类变量 void setside(float sidea) this.sidea=sidea; static void setcount(int count) t.count=count; ,局部变量,30,本章导读,面向对象的概念和特征 java中的类和对象 java中的继承和多态 访问权限,31,java中的继承和多态,(1)子类和父类 (2)类继承的语法 (3)类继承的使用 (4)成员变量的隐藏 (5)方法的重写 (6)关键字super,(1)子类与父类,类之间的继承关系是一种由已经存在的类创建新类的机制,可以有效地实现代码的重复使用 可以先定义一个共有属性的一般类(父类或超类),在此基础上定义新的类(子类) 子类可以继承父类的属性和方法(子类不继承父类的构造方法),也可以定义自己独有的属性和方法 父类可以是java类库中的类,也可以是自己编写的类 java不支持多重继承,即子类只能有一个父类,33,(2)类继承的语法,在类的声明中,使用关键字extends来声明一个类是另一个类的子类 class 子类名 extends 父类名 子类的类体 例如 class manger extends employee ,34,(2)类继承的语法,如果一个类的声明中没有使用关键字extends,这个类被系统默认为是object类的子类,object类是java.lang中的类 class a 等价于 class a extends object ,35,(3)类继承的使用,如果子类继承了父类的成员变量和成员方法,就可以将它们作为己用,就像在子类中定义的一样 子类如果没有继承父类的某些成员变量或成员方法,则子类无法对它们进行访问或调用,36,(3)类继承的使用,class a /父类 int first=100; /first也是b的成员变量 int add(int x, int y) /add也是b的成员方法 return x+y; class b extends a /b是a的子类 int second=200; /second是b独有的成员变量 int mult(int x, int y) /mult是b独有的成员变量 return x*y; ,testinherit.java (p59,程序2-12),37,(4)成员变量的隐藏,子类中定义的新的变量如果和继承过来的变量名称相同,则会隐藏继承过来的成员变量 class a int first=10; int second=20; class b extends a int first=100; double second=200; int third=300; void change() first+=50; second+=50; third+=50; ,b的对象使用first和second时,a中的first和second被隐藏,testhidden.java (p60,程序2-13),38,(5)方法的重写,方法的重写也是多态的一种表现 方法的重写是指子类可以改写父类方法所实现的功能,但是子类重写的方法必须与父类中的对应方法有相同的名称、返回类型和参数列表 如果父类中的方法被子类重写,则子类的对象调用这个方法时,实际运行的是子类中改写之后的方法,父类中的相应方法被隐藏了起来,39,(5)方法的重写,class slowadder int x=10; void increase(int addend) x+=addend; class quickadder extends slowadder int x=100; void increase(int addend) /重写父类的方法 x+=2*addend; ,testoverride.java (p61,程序2-14),40,class slowadder int increase(int x, int y) return x+y; class quickadder extends slowadder int increase(int x, int y, int z) return x+y+z; ,不是重写,是过载,41,class a public int f(int x, int y) return x+y; class b extends a public int f(byte x, int y) return x*y; ,不是重写,是过载,42,(6)关键字super,关键字super代表当前对象的父类部分 super有两种用法 子类使用super调用父类的构造方法 子类使用super操作父类中被子类隐藏的成员变量和方法,43,(6)关键字super,子类使用super调用父类的构造方法 子类不继承父类的构造方法 子类中有些初始化工作需要调用父类的构造方法帮助实现,需要用super关键字 子类构造方法中调用父类构造方法的语法为 super(参数列表) 子类构造方法中使用super调用父类构造方法时,必须把调用语句放在最开始 如果不在子类的构造方法中显式地调用父类的构造方法,系统会调用一个无参的父类构造方法,如果父类没有提供无参构造方法,则编译出错,44,(6)关键字super,使用super调用父类的构造方法,class father int a; father() a=0; father(int givena) a=givena; ,class son extends father int b; son() super(); /可以省略 b=0; son(int givena,int givenb) super(givena); b=givenb; ,testsuper.java (p63,程序2-16),45,(6)关键字super,子类使用super操作父类中被子类隐藏的成员变量和方法 super.变量名 super.方法名(参数列表),46,(6)关键字super,子类使用super操作父类中被子类隐藏的成员变量和方法,class slowadder int x=10; int increase(int basic) return basic+x; ,class quickadder extends slowadder string x=“我们”; int middle(int basic) int sum=super.increase(basic); sum+=super.x; return sum; int increase(int basic) return basic+4*super.x; ,x覆盖了父类的成员变量x,覆盖了父类的increase(int),testsuper2.java (p64,程序2-17),47,本章导读,面向对象的概念和特征 java中的类和对象 java中的继承和多态 访问权限,48,访问权限,包(package) import语句 成员变量和成员方法的访问权限 类和构造方法的访问权限,49,包(package),为了使类易于查找和使用,也为了防止命名冲突和限定类的访问权限,可以将一组相关类与接口包裹在一起形成包 包具有特定的访问控制权限,同一个包中的类之间拥有特定的访问权限,50,包的声明,package 包名 package语句是java源文件的第一条语句 如果源文件中没有package语句,则其中的类被默认为在无名包中 包名可以是标识符,也可以是若干标识符加“.”组成,建议用小写 package adder; package com.sun.jdk,为了避免包名冲突,建议开发者用自己单位的域名的倒置作为包名,含有包信息源程序的编译和运行,假设源文件“testpackage.java”在d:study中,其中的包信息是“package compute.calculators;” (1)打开ms-dos窗口,选择d:study (2)使用javac testpackage.java命令编译源文件 (3) 在d:study下建立子目录computecalculators, 将编译产生的字节文件复制到其中 (4)在d:study中使用 java compute.calculators.testpackage 运行源文件,含有包信息源程序的编译和运行,假设源文件“testpackage.java”在d:study中,其中的包信息是“package compute.calculators;” (1)打开ms-dos窗口,选择d:study (2)使用javac d d:study testpackage.java命令编译源文件,该命令可以自动生成目录 d:studycomputecalculators 并且将字节码产生在其中 (3)在d:study中使用 java compute.calculators.testpackage 运行源文件,53,import语句,使用import语句可以引入包中的类 import语句必须写在package语句和源文件中类的定义之间 引入一个包中的全部类 import java.applet.*; import java.awt.*; 引入一个包中的某个类 import java.util.arrays; java运行平台提供的类库在安装目录的jrelib中的rt.jar中,54,成员变量和成员方法的访问权限,成员变量和成员方法的访问控制修饰符包括 private 不使用修饰符(或者称default) protected public,private,一个类中,带有private的成员变量和成员方法称为私有成员变量和私有成员方法,它们只能被类自身访问,class adder private int x; /私有变量 private int increase(int basic) /私有方法 return basic+x; ,class user void use(int input) adder adder=new adder(); adder.x+=1; /非法 /下面的语句非法 int result=adder.increase(6); ,56,private,对某个类的私有静态方法或私有静态变量,其他类不能用类名对它们直接访问 同一个类的两个对象可以相互访问对方的私有变量和私有方法,57,default,一个类中,不用任何访问权限控制符修饰的成员变量和成员方法称为默认权限的成员变量

温馨提示

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

评论

0/150

提交评论