四章面向对象基础ppt课件.ppt

上传人:sccc 文档编号:5384293 上传时间:2023-07-02 格式:PPT 页数:106 大小:2.29MB
返回 下载 相关 举报
四章面向对象基础ppt课件.ppt_第1页
第1页 / 共106页
四章面向对象基础ppt课件.ppt_第2页
第2页 / 共106页
四章面向对象基础ppt课件.ppt_第3页
第3页 / 共106页
四章面向对象基础ppt课件.ppt_第4页
第4页 / 共106页
四章面向对象基础ppt课件.ppt_第5页
第5页 / 共106页
点击查看更多>>
资源描述

《四章面向对象基础ppt课件.ppt》由会员分享,可在线阅读,更多相关《四章面向对象基础ppt课件.ppt(106页珍藏版)》请在三一办公上搜索。

1、1,第四章 面向对象基础,主要内容:1.面向对象基本概念 2.Java的类与对象 3.成员变量与封装 4.成员方法,2,理解面向对象编程的基本概念 了解类的封装方法 如何创建类和对象 了解成员变量和成员方法的特性 学习使用OOP方式进行程序设计,教学目的和要求:,3,重点与难点,重点:类和对象的概念,及实际应用 难点:类的设计,4,4.1 面向对象的基本概念4.2 类4.3 对象4.4 方法4.5 访问控制修饰符4.6 静态修饰符、静态字段和方法4.7 抽象类与抽象方法4.8 最终类、最终属性、最终方法与终结器本章小结,目 录,5,上一章内容复习,一、Java 语言的分支语句 条件语句 if-

2、else 多分支语句 switch-case 二、Java 语言的循环语句 while 语句 do-while 语句 for 语句 三、Java 语言的跳转语句 break 语句continue 语句四、Java 语言的注释语句,6,4.1 面向对象概念,1、对象2、对象的封装3、类和实例4、消息5、继承6、对象之间的关系,7,1、对象,对象(object):面向对象技术的核心。我们可以把我们所生活的真实世界(Real World)看成是由许多大小不同的对象所组成的。对象可以是有生命的个体,比如一个人或一只鸟。,8,对象,对象也可以是无生命的个体,比如一辆汽车或一台计算机。,9,对象,对象还可

3、以是一件抽象的概念,如天气的变化或者鼠标所产生的事件,或者是一个自然数。,123,10,对象的属性和行为,环顾周围的世界,任何地方都可以看到对象,例如:人、狗、汽车、计算机、桌子、椅子等等。不管是有生命的对象还是无生命的对象,它们都有一些共同的特征:属性和行为。,11,对象的属性和行为,例如,人有姓名、年龄、身高、职业等属性,有工作、吃饭、运动等行为。而汽车有形状、颜色、品牌等属性,有启动、加速、刹车、转弯等行为。,12,软件对象,软件对象:现实世界中的对象在计算机中的抽象表示,即仿照现实对象而建立的。软件对象也有状态和行为,软件对象用变量表示对象的状态、用方法来实现对象的行为。一个软件对象就

4、是变量和相关方法的集合。,软件对象 变量方法,13,软件对象的特性,对象名:唯一标识,区别于其它对象的标志,例如car;变量:对象所处的状态,例如汽车行驶的速度;方法:通过改变对象的状态,来实现对象的行为,例如通过加速这个方法来改变汽车的速度;接口:与外界通信的通道。注意:今后,在不引起歧义的情况下,我们把软件对象简称为对象。,14,对象和实体的关系,对象是对现实世界中实体的抽象Why?实体太复杂啦!How?取其关心的部分!What?对象是抽象的,对象是部分的!,人,抽象,15,2、对象的封装,一个对象的变量(状态)构成这个对象的核心,一般不将其对外公布,而是将对变量进行操作的方法对外公开,这

5、样变量就被隐藏起来。这种将对象的变量置于方法的保护之下的方式称为封装。,变量,方法,外部访问,16,2、对象的封装,例如:可以把汽车抽象成一个对象,用变量表示它当前的状态,如速度、油量、所处的位置等,它的行为则可以有加速、刹车、换档等。我们在驾驶汽车时,只需要知道如何操作相应的方法就可以了,不用考虑汽车内部是如何实现诸如提速、刹车等行为。,17,封装将对象的私有数据隐藏起来,其他对象不能直接访问这些私有数据,必须通过调用该对象的相关方法来间接访问。,私有数据,方法,方法,数据,对象A,对象B,公有数据,18,对象封装的好处,通过将对象进行封装,能把对别的对象来说并不重要的对象的实现细节隐蔽起来

6、,从而在使用一个对象时,只需知道调用它的方法而无需知道该方法是如何实现的。(1)模块化:一个对象的源代码的编写和维护独立于其他对象的源代码,而且,对象的使用也很方便;(2)信息隐蔽:每个对象都有一个公共接口使得其他对象可以与其通信,但对象的私有信息和方法则由它自己维护,并且改变这些私有信息和方法不会影响到使用它的其他对象。,19,3、类,在现实世界里,有许多同“种类”的对象。而这些同“种类”的对象可被归类为一个“类”。例如,我们可将世界上所有的动物归为动物类,所有的汽车归类为汽车类。,动物类,汽车类,20,对象与类,class Taxi int color;int door_number;in

7、t speed;void brake()void speedUp()void slowDown(),抽象,软件对象,归类,现实生活中的对象,21,类的概念,类是对多个具有相似行为的对象的一种抽象,描述了属于该类型的所有对象的性质,即类定义了所有某种类型的对象的共有的变量和方法。在面向对象的程序设计中,类是程序的基本单元。,Athlete,22,类与实例(instance),汽车类有些共同的状态(汽缸排气量、排档数、颜色、轮胎数)和行为(换档、开灯、刹车),但每一台汽车有个别的状态和方法可以不同于其他汽车。你的汽车只是这世界中许多汽车中的一个。我们就称你的汽车对象是汽车类中的一个实例(insta

8、nce)。,23,对象和类的关系,类是同类对象的集合和抽象学生A、学生B 学生类对象是类的一个实例化学生类学生A,24,4、消息(message),单独一个对象一般没有什么用处,在大的应用程序中通常包括许多对象,并通过这些对象之间的交互来完成一个复杂的功能。例如在多媒体教室教学活动中,包括教师对象、学生对象、计算机对象、投影仪对象、扩音器对象以及桌子等对象,通过这些对象之间的交互才能顺利完成我们的教学活动。,25,通过各个对象之间的交互,程序就可以实现更高级的功能以及更复杂的行为。软件对象是通过相互间传递消息来实现交互的。,26,当对象A想让对象B执行某项任务时,对象A就向对象B传递消息。有时

9、,接受消息的对象需要了解更多的信息,以明确它该做什么,这时就需要传递一些参数。例如,要使汽车加速,必须发给它一个消息,告诉它做何种动作(即加速),以及实现这个动作所需的参数(即需要达到的速度等)。发送消息的实质就是要调用接受消息的对象的方法,所以发送消息可分为三个步骤:(1)确定接受消息的对象;(2)确定调用对象的哪个方法;(3)传递此方法所需要的参数。,27,一个消息由3个元素所组成:1.消息目标对象(你的汽车)。2.执行方法的名字(换档)。3.执行方法所需用的参数(parameters)(低、高速档)。消息的好处 1.一个对象的行为是通过它的方法来表达,所以消息传递支持所有对象之间可能的交

10、互。2.发送消息的对象与接受消息的对象不需要在相同的程序中,或者相同的机器上。,28,5、子类和继承,什么是子类?子类是作为另一个类的扩充或修正所定义的一个类。,29,继承的概念,什么是继承?继承即子类可以利用父类中定义的方法和变量,就像它们属于子类本身一样。,class Car int color_number;int door_number;int speed;push_break()add_oil(),class Trash_Car extends Car double amount;fill_trash(),30,类层级(class hierarchy),类的继承关系不仅仅只是一层关系

11、,它可以有好几层。这种树状关系,我们称作类层级(class hierarchy)。至于层级数可依照实际需要而定。,31,类层级(class hierarchy),子类继承了父类的变量及方法。如此便可重复使用父类中的变量及方法。这就是继承的好处。不仅如此,子类不受父类的限制,还可增加自己的变量及方法。例如在出租车中加了一个无线电调用方法,或是在轿车里加了一个卫星导航方法。都是按子类特殊的需要新加的。因此,我们可以发现越下层的类,其行为越特别。,32,6、类(对象)之间的关系,关联关系继承关系聚合关系实现关系多态性,33,类(对象)之间的关联关系,关联关系是最弱的关系实现:为一个类的方法参数是另一

12、个类的一个实例,34,继承关系(一般和特殊),XX是一种XXX(java多重继承机制),35,聚合关系(整体和部分),聚合关系:XX是XXX的一部分聚集(松耦),组合(紧密),36,实现关系,实现关系是多态的基础,37,多态,38,4.2 类,类是现实世界某些对象的共同特征(属性和操作)的表示,对象是类的实例。,类的属性:类中所包含的各项数据,如变量或其他类的对象,一般称为类的成员变量。类的服务:类中所包含的成员方法。,39,4.2 类,Java语言中,类的来源主要有两种途径:Java类库 用户自定义的类所有的类都是Object类的子类。如果在自定义类时,没有写明父类,则默认的父类为 Obje

13、ct。从严格意义上讲,Java程序中定义的所有的类都是子类。,40,4.2.1 类的定义,类成员变量声明 类方法声明,修饰符用来说明类的特殊性质,分为三种:访问控制符:public抽象类说明符:abstract最终类说明符:final,接口名跟在implements关键字后面,用来说明类中实现了哪个接口定义的功能和方法。接口是Java用来实现多重继 承的一种特殊机制,我们将在后面详细介绍。,修饰符 class 类名 extends 父类 implements 接口名,41,1关于类头,修饰符 class 类名 extends 父类 implements 接口名,class关键字的后面,应跟随我

14、们所定义的类的名称。(注意不要把class写成Class)。父类名跟在extends 关键字后面,用来说明当前类是哪个已经存在类的子类。继承是类与类之间的一种非常重要的关系。,42,2关于类体 类体的定义要包括类的具体内容,包括类的属性(成员变量)与方法(成员方法)。class,43,类的属性为简单变量的语法如下:修饰符 变量类型 变量名=变量初值;,变量类型和变量名是声明一个变量必不可少的部分;这里的变量的类型是基本数据类型,如 int、double 等。,类的属性,修饰符用来说明变量的特殊性质,主要分为三种:访问控制符:public静态修饰符:static最终修饰符:final,44,类的

15、方法,Java中声明方法的语法如下:修饰符 返回值类型 方法名(参数列表)throws 例外名1,例外名2,/方法体:局部变量声明;语句序列;,类的方法有两种作用:一是对类的属性进行各种操作;二是与其他类或对象进行数据交流、消息传递等操作。,方法修饰符分为四种:访问控制符:public抽象修饰符:abstract静态修饰符:static最终修饰符:final,45,4.2.2 用户自定义类,Java程序设计中,大部分精力都要放在创建称为类的用户自定义类型(user-defined type)上。类也称为程序员定义的类型(programmer-defined type),每个类都含有数据和一组操

16、作数据的方法。用户自定义类型(即类)的实例称为对象。,下面是一个简单的 Employee 类,今后我们在编写职工工资系统时,有可能会用到它。,46,class EmployeeString name;/成员变量double salary;Date hireDay;public Employee(String n,double s,int year,int month,int day)/构造方法 name=n;/职工姓名 salary=s;/职工工资 hireDay=new GregorianCalendar(year,month-1,day);/出勤数public String getName

17、()/方法1 return name;/更多的方法,47,4.2.3 构造方法,定义好一个类以后,我们需要创建该类的实例。在Java中,构造一个类的实例(对象),编译器需要完成以下三件事情:(1)为对象分配内存空间;(2)初始化对象中的成员变量的值,初始值可以是缺省值,或者指定一个初始值;(3)调用类的构造方法。在 Java中,每个类中都至少有一个构造方法。如果没有,则编译器会自动为该类定义一个默认的构造方法。构造方法的作用:(1)可以保证用户正确地构造类的对象;(2)可以对对象进行初始化。,48,构造方法的格式,构造方法的语法形式如下:构造方法修饰符 方法名(形式参数列表)throws 异常

18、列表 方法体 其中,构造方法修饰符与通常的方法修饰符相同。一个类的构造方法可以有多个,它们都具有相同的方法名,即类名,只是参数的个数和类型会不同。编译器根据参数的个数和类型来决定调用哪个构造方法。这就是构造方法的多态。,没有返回值,也没有void,方法名与类名相同,49,缺省的构造方法,构造方法分为缺省的构造方法(不带参数)和带参数的构造方法。如果类的定义中没有编写构造方法,Java语言会自动为用户提供一个缺省的构造方法。缺省的构造方法确保每个 Java类都至少有一个构造方法。例如在类 Employee 中,如果我们没有定义构造方法,则 Java自动提供一个缺省的构造方法,如下:public

19、Employee()/缺省的构造方法,50,构造方法的例子,【例】下面的例子将建立雇员信息类 EmpInfoA,其中定义了一个构造方法。利用这个构造方法创建一个雇员对象,并初始化该对象,然后打印出该对象的若干信息。,51,构造方法举例,public class EmpInfoA String name;/雇员的姓名 String designation;/雇员的职务 String department;/雇员的部门/带参数的构造方法 public EmpInfoA(String name,String designation,String department)this.name=name;t

20、his.designation=designation;this.department=department;void print()/成员方法 System.out.println(name+是+department+的+designation);public static void main(String args)/主方法,程序入口 EmpInfoA emp=new EmpInfoA(张三,经理,销售部);emp.print();/调用方法 print(),例子:EmpInfoB,52,类成员变量的初始化,对类的成员变量进行初始化,主要有5种途径:每种数据类型都有默认的初始值可以在声明成

21、员变量的同时赋予相应的初始值在类的成员方法中,为每个类成员变量赋值。例如:在main()方法中在类的构造方法中,为每个类成员变量赋值。例如:在前面的构造方法的例子中利用初始化块对成员变量进行初始化。初始化块是由一对花括号括起的语句块。初始化块不能位于任何方法内,53,初始化块、构造方法初始化成员变量,class Point int x,y;/成员变量/在初始化块中初始化 x=10;y=20;System.out.println(Point initialization block);Point(int dx,int dy)/在构造方法中初始化 x=dx;y=dy;System.out.prin

22、tln(Point construct method);,54,4.3 对象,类是对象的产品模板。在现实世界里,我们使用的是产品而不是产品的图纸。同样道理,Java中运行的应该是用类创建的实例化对象。当使用一个类创建了一个对象时,我们也称之为给出了这个类的一个实例。一个典型的Java程序会创建很多对象,它们通过消息传递进行相互交流,共同完成程序的功能。一旦任务完成,对象就会被垃圾收集器收回,完成它从创建、使用到清除的生命三步曲。,55,对象的创建,首先必须拥有一个合适的类才能创建一个合适的对象,有了合适的对象才能完成合适的工作。对象创建的语法格式为:类名 对象名=new 类名(参数列表);,调

23、用类的构造方法,声明对象,56,创建一个对象的三个步骤,1、对象的声明格式为:类名 对象名;例如:People zhangPing;2、为声明的对象分配内存new 运算符为声明的对象分配内存,然后调用类的构造方法来初始化对象。用new可以为同一个类实例化多个不同的对象,这些对象分别占用不同的内存空间,因此改变其中一个对象的状态不会影响到其他对象的状态。3、执行构造方法,进行初始化zhangPing=new People(“20040101”);zhangYong=new People(“20040102”);/实例化另一个对象 上面三个步骤,通常可以写成如下简洁的形式:People zhang

24、Ping=new People(“20040101”);,类名 对象名=new 类名(参数列表);,57,对象创建的例子,【例】下面的例子将建立雇员信息类 EmpInfoB。利用缺省的构造方法创建一个雇员对象。并且在主方法中初始化该对象,然后打印出该对象的若干信息。,58,public class EmpInfoB String name;/雇员的姓名 String designation;/雇员的职务 String department;/雇员的部门 void print()/成员方法 System.out.println(name+是+department+的+designation);p

25、ublic static void main(String args)/主方法 EmpInfoB emp=new EmpInfoB();/调用缺省构造方法创建对象 emp.name=张三;/初始化对象 emp emp.designation=经理;emp.department=销售部;emp.print();/调用方法 print(),例子:EmpInfoA,对象创建举例,59,对象的使用,创建好一个对象之后,就可以使用这个对象。(1)访问对象的成员变量:通过运算符“.”格式为:对象名.成员变量名 例如,在前面对象创建的例子中:emp.name=张三;成员变量的访问也可以用new创建对象,然后

26、直接访问,不用声明。例如:new EmpInfoB().name=张三。(2)调用对象的方法:也是通过运算符“.”格式为:对象名.方法名(参数列表)例如,在前面对象创建的例子中:emp.print();同样,我们也可以用new创建对象,然后直接调用它的方法,不用声明。例如:new EmpInfoB().print()。,60,对象的清除,Java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存,完成对象的清除。Java的垃圾收集器自动扫描对象的动态内存区,对正在使用的对象加标记,然后把无用对象作为垃圾收集起来并释放。垃圾收集器作为一个线程运行,当系统的内存用尽或程序中调用System.

27、gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行,否则垃圾收集器在系统空闲时异步地执行。在对象作为垃圾被收集器释放前,系统会自动调用对象的方法 finalize(),清除对象所占用的资源。Java提供自动内存垃圾收集和处理程序。然而,在某些情况下,当一个类被破坏后,需要程序员自己执行一些垃圾收集器不能处理的特殊清理工作。这时可以在类的定义中提供用于对象清除的方法 finalize(),它的格式如下:protected void finalize()throws Throwable/撤销对象,61,4.4.1 方法概述,4.4 方法,Java程序是由一个个类组成的,类有两个部分:属性和方法

28、。属性描述类是什么,方法描述类做什么。方法是类的主要组成部分。在一个类中,程序的作用主要体现在方法中。方法是Java创建的一个有名字的子程序。通常分为一个主方法和若干个子方法。主方法调用其他方法,其他方法之间也可以互相调用,同一个方法可以被一个或多个方法调用任意次。,62,Java程序的基本结构,导入Java类库;定义用户类1 定义类1的若干变量;定义类1的方法1;定义类1的方法M;定义用户类2 定义类2的若干变量;定义类2的方法1;定义类2的方法N;,63,设计方法的原则与规律,(1)算法中需要细化的步骤、程序中重复的代码以及重载父类方法都可以定义成类的方法。(2)界面清晰,大小适中。(3)

29、方法有两种:一种是标准方法,Java API提供了丰富的类和方法,这些方法提供了程序员所需的许多功能。另一种是用户自定义的方法,以解决用户专门的需要。(4)Java 程序的执行是从main方法开始的,调用其他方法后又回到main方法,在main方法中结束整个程序的运行。,64,4.4.2 定义方法1声明方法头2声明方法体,Java中声明方法的语法如下:修饰符 返回值类型 方法名(参数列表)throws 例外名1,例外名2,/方法体:局部变量声明;语句序列;,65,1、声明方法头,方法头一般由方法名、参数列表、返回类型、方法修饰符和方法抛出的例外五部分组成。注意事项:(1)方法名可以是任何有效的

30、标识符,命名规则与标识符命名规则相同。(2)返回类型用来指定方法返回值的类型,方法最多只能返回一个值。(3)参数列表是方法的输入接口,它列出了一系列形式参数的类型和名称。对于每个行参,调用方法时必须有一个实参与之对应,而且该实参的类型必须与行参的类型一致。,66,2、声明方法体,方法头定义了方法的性质,方法体则定义了方法的内容。注意事项:(1)在一个方法中定义另一个方法将产生语法错误;(2)方法体包含在一对大括号中,即使方法体中没有语句,一对大括号也是必不可少的。(3)最好避免局部变量“屏蔽”类的成员变量,在一个类中不使用同名的标识符就可以做到这一点;(4)方法头中如果指定了非void的返回值

31、类型,方法体中就必须包含一条return语句保证任何情况下都有返回值。,67,声明方法体的例子,class Department int m_DeptNo;/部门编号 String m_DeptName;/部门名称 int m_DeptTotalEmp;/部门雇员数 int getDeptNo()/获取当前对象的部门号 return m_DeptNo;/返回这个对象的部门号,68,4.4.3 方法的调用,Java语言中的方法按其调用方式可分为两类:(1)需要程序员书写专门的调用命令来调用的方法,称为程序调用方法,例如 getDeptNo();(2)运行过程中系统自动调用的方法,称为系统方法。例

32、如 action()、paint()、init()等。这两类方法的定义和使用原则有很大差异。在类中调用类自身的方法,可以直接使用这个方法的名称;调用其他对象或类的方法,则需要使用该对象或类作为前缀。,69,方法的调用(实例),class Department int m_DeptNo;/部门编号 String m_DeptName;/部门名称 int m_DeptTotalEmp;/部门雇员数 int getDeptNo()/获取当前对象的部门号 return m_DeptNo;/返回这个对象的部门号 public static void main(String args)Department

33、 dep=new Department();dep.m_DeptNo=100;System.out.println(部门号为:+dep.getDeptNo();,70,回 顾,4.5 访问控制修饰符:public,protected,private4.6 静态修饰符 static4.7 抽象类与抽象方法 abstract,71,方法的重载,同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即形参的数量或类型不能完全相同。方法调用的时候,编译器会根据实参的类型和个数来决定具体调用其中哪个方法。方法重载可以简化程序的编写,用户只要记住一个方法名,通过传递不同的实参就可以调用不同的方

34、法来完成不同的功能。构造方法也可以重载,其目的是使对象具有不同的初始值,为用户创建不同初始值的对象提供方便。,72,class Overloading void get(int i)System.out.println(get one int data:i=+i);void get(int x,int y)System.out.println(get two int datas:x=+x+y=+y);void get(double d)System.out.println(get one double data:d=+d);void get(String s)System.out.printl

35、n(get a string:s=+s);public static void main(String args)Overloading mo=new Overloading();mo.get(1);mo.get(2,3);mo.get(4.5);mo.get(a string);,73,4.4.4 Java API 中的方法,在Java中,Java API(Application Program Interface,也称为Java类库)提供了丰富的类和方法,可以执行常见的算术运算、字符、字符串、输入输出、错误检查等操作。1、Math 类的方法 2、Math 类方法的调用,74,1、Math类

36、的方法,75,2、Math类方法的调用,例如,要计算并且打印出900的平方根,需要调用Math类的方法如下:System.out.println(Math.sqrt(900);,注意:所有Math类方法的调用必须在方法名前加上类名Math和点“.”运算符。,76,4.5 访问控制修饰符,Java新推出“访问控制修饰符”的概念,允许类创建者声明哪些东西是类使用者可以使用的,哪些是不可以使用的。每个访问控制修饰符都代表一种访问控制权限。这些访问控制权限的级别在“最大权限”到“最小权限”范围之间,分别包括:public protected default(无修饰符)private,77,为类指定访问

37、权限的格式:public class 类名;如果一个类没有指定为public,则该类的访问权限就是缺省的。,78,为类中的属性和方法指定访问权限的格式:public|private|protected 数据类型 变量名;public|private|protected 返回类型 方法名(参数列表);如果一个属性或方法没有指定访问控制修饰符,则该属性或方法的访问权限就是缺省的。,79,4.5.1 公共访问控制符 public,类的访问控制符只有一个:public。一个类被声明为公共类,表明它可以被所有的其他类所访问和引用。注意:这里的类可以被访问和引用不代表类中的成员也可以被访问。只有当这些成员

38、也是公共的,才可以访问。,例如:要进入二楼的一个房间,必须首先保证这栋楼的大门是开着的,而且这个房间的门也开着,才可以进入其中。,80,4.5.2 缺省访问控制权限,如果一个类前面没有访问控制符,则说明它具有缺省的访问控制权限。缺省的访问控制权限规定类只能被同一个包中的类访问和引用,而不可以被其他包中的类使用。,4,1,8,包1,包2,包3,包n,类,default,81,4.5.3 私有访问控制符 private 用private修饰的属性或方法只能被该类自身所访问和修改,而不能被任何其他的类,包括该类的子类,来访问和引用。,属性1n方法1m,private 父类,属性1n方法1m,子类,属

39、性1n方法1m,其他类,82,class Employeeprivate String name;/成员变量,私有访问权限private double salary;public Employee(String n,double s)/构造方法 name=n;/职工姓名 salary=s;/职工工资 public String getName()/方法1 return name;public static void main(String args)Employee e=new Employee(Jack,2600d);System.out.println(姓名为:+e.getName();,

40、83,2.私有方法,虽然大多数方法是公开的,但是私有方法也经常使用。例如那些与类的访问者无关的方法就可以设置为私有的。,private 方法1(与访问者无关)public 方法2(与访问者有关),被访问类,属性1n方法1m,访问类,84,public class Demo public int a;/公共的成员变量 private int b;/私有的成员变量 public int getA()/公共的成员方法 return a;private int getB()/私有的成员方法 return b;public Demo(int x,int y)a=x;/访问公共成员变量,对其初始化b=y;

41、/访问私有成员变量,对其初始化public static void main(String args)Demo dp=new Demo(1,2);int w=dp.getA();/访问公共的成员方法 System.out.println(变量a的值:+w);int v=dp.getB();/访问私有的成员方法 System.out.println(变量b的值:+v);,85,4.5.4 保护访问控制符protected用protected修饰的成员可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类。protected 的主要作用:允许位于其他包中的子类来访问父类的成

42、员。,4,1,8,8,包1,包2,protected,假设包1中的类4不是包2中的类1的子类,假设包1中的类8是包2中的类1的子类,86,package p1;public class Demopro public int a;/公共的成员变量protected void method()/保护的成员方法 System.out.println(Demopro中的公共成员变量a的值:+a);,package p2;import p1.*;public class test public static void main(String args)Demopro dp=new Demopro();d

43、p.method();/*不能访问 Demopro 中protected方 法 method,因为它位于包 pro1 中*/dp.a=10;/可以访问 Demopro 中的公共成员变量 System.out.println(Demopro中的公共成员变量a的值:+dp.a);,87,如果上面的两个类Demopro和test位于同一个包中,则上面的语句dp.method()就会有效。如果两个类位于不同的包中且没有继承关系,则保护类型的成员变量和方法的访问将受到限制。因此上面的 dp.method()不能正确执行。,88,归纳上述4种不同的访问控制修饰符:,权限递增,89,4.6 静态修饰符、类初

44、始化块和方法,4.6.1 静态修饰符,static 是静态修饰符,用来修饰类中的属性和方法。被 static 修饰的变量称为静态变量,静态变量的特点是:它们属于类本身,不属于类的任何一个具体对象。静态变量是一个公共的内存单元。,90,static int x;,类 student,张三,李四,实例化,x,int y;,类 student,张三,李四,实例化,y,y,属于,属于,属于,91,4.6.1静态变量,static声明的成员变量被视为类的成员变量,而不是对象的成员变量。静态变量是类固有的,可以在创建类以后直接访问,而非静态的成员变量只有在生成对象后才存在,才可以访问。把静态变量称为类变量

45、,非静态变量称为对象变量。相应地,静态方法称为类方法,非静态方法称为对象方法。,92,class StaticDemo static int x;/静态变量 int y;/非静态变量 static public int getX()return x;/静态方法 public int getY()return y;/非静态方法public class ShowDemo public static void main(String args)System.out.println(静态变量x=+StaticDemo.getX();System.out.println(“非静态变量y=”+Static

46、Demo.getY();/非法访问 StaticDemo a=new StaticDemo();StaticDemo b=new StaticDemo();a.x=2;a.y=2;b.x=3;b.y=3;System.out.println(静态变量a.x=+a.getX();System.out.println(非静态变量a.y=+a.getY();System.out.println(静态变量b.x=+b.getX();System.out.println(非静态变量b.y=+b.getY();,93,类的静态成员可以直接访问,例如在程序中直接使用了StaticDemo.getX(),而非

47、静态成员则不行。类的静态变量只有一个版本,所有对象访问的都是同一个版本。创建对象的时候,每个对象变量都被制作了一个副本,它们之间互不影响。,x3,a,b,y2,a,y3,b,94,静态类初始化块是由关键字static标识的一对大括号括起的语句组。例如:static 静态类初始化块可以用来初始化静态变量。在一个类中只能有一个静态类初始化块,并且不能位于任何方法中。,4.6.2 静态类初始化块,95,静态变量是很少见的。然而,静态常量却很普遍。例如,Math类中就定义了一个静态常量:public class Mathpublic static final double PI=3.1.4159265

48、358979323846;,4.6.3 静态常量,96,static方法的含义:(1)调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名,因为它不属于具体的对象;(2)非静态的方法属于某个对象,在这个对象创建时该方法在内存中拥有自己专用的代码段;而static方法属于整个类,它在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有;(3)static方法不能访问非静态的成员变量,而只能访问静态变量。,4.6.4 静态方法,97,4.6.5 main方法,main方法是一个静态方法。每个类都可以有一个main方法。它是程序的入口和出口。,98,4.7 抽象类与抽象方法,abs

49、tract 是抽象修饰符,可以用来修饰类或方法。为什么要使用抽象类和抽象方法呢?一个抽象类可以定义一个统一的编程接口,使其子类表现出共同的状态和行为,但各自的实现细节不同。可以增加编程的灵活性。,99,4.7.1 抽象类,当一个类被声明为abstract时,这个类被称为是抽象类。所谓抽象类就是没有具体实例对象的类。人类就是一个典型的抽象类。我们知道,类是对象的集合,对象是类的实例化,而人类这个类却不存在一个属于它的具体对象。抽象类需要被子类所继承才能生成具体的对象。,100,作为方法修饰符,abstract 声明了一种仅有方法头,而没有方法体的抽象方法。抽象方法属于一种不完整的方法。语法形式为

50、:abstract 返回类型 方法名(参数列表);abstract方法只有方法头,而用一个分号来代替方法体(没有花括号)。,4.7.2 抽象方法,101,注意:所有的抽象方法,都必须存在于抽象类之中。即如果一个类中有抽象方法,则该类必须为抽象类。除了抽象方法,抽象类也可以有具体的数据和方法。例如,Person类存储人的名字并且用一个具体的方法来返回它。Java 中抽象方法是非常重要的概念。在接口中会大量的用到它。,102,4.8 最终类、最终属性、最终方法,final是最终修饰符,它可以修饰类、属性和方法。,4.8.1 最终类 如果一个类被声明为final,意味着它不能再派生出新的子类,不能被

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号