版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java语言程序设计清华大学出版社第3章 面向对象程序设计基础本章主要内容3.1面向对象的基本概念3.2类与对象3.2.1 定义类3.2.2 成员方法3.3 对象3.4 面向对象特性3.4.1 封装性3.4.2继承性3.4.3多态性3.4.4 其它修饰符的用法3.5接口和包3.5.1接口3.5.2包3.5.3 压缩文件.jar3.1面向对象的基本概念1、 对象的基本概念 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。 现实世界中的对象有两个共同特征:形态和行为。 图3.2 软件对象的变量和方法 2、 类的基本概念 类用class作为它的关键字,例如我们要创建一个汽车类,则
2、可表示为:用类创建对象实例化当我们要通过汽车类来创建一个轿车对象,并使用它的刹车行为方法时,则要用下面的格式进行实例化: /实例化汽车对象汽车轿车= new 汽车( ) ; /引用汽车对象的刹车方法轿车.刹车( ) ;3.2类与对象类和对象是Java的核心和本质。它们是Java语言的基础,编写一个Java程序,在某种程度上来说就是定义类和创建对象。定义类和建立对象是Java编程的主要任务。 3.2.1 定义类 1、 类的一般形式 类由类声明和类体组成,而类体又由成员变量和成员方法组成(如图3.3所示): 一个具体的类 2、类声明 类声明由四部分组成:类修饰符、类关键字class、声明父类、实现
3、接口,其一般形式如下: publicabstract|final class 类名 extends 父类名 implements 接口列表 各组成部分的具体说明 (1) 类修饰符public:这个public关键字声明了类可以在其他类中使用。缺省时,该类只能被同一个包中的其他类使用。abstract:声明这个类为抽象类,即这个类不能被实例化。final:声明该类不能被继承,即不能有子类。也就是说,不能用它通过扩展的办法来创建新类。(2) 类的关键字class在类声明中,class是声明类的关键字,表示类声明的开始,类声明后面跟着类名,按习惯类名要用大写字母开头,并且类名不能用阿拉伯数字开头。给
4、类名命名时,最好取一个容易识别且有意义的名字,避免A、B、C之类的类名。 (3) 声明父类extends为声明该类的父类,这表明该类是其父类的子类。一个子类可以从它的父类继承变量和方法。extends只能实现单继承。创建子类格式:class subclass extends 父类名(4)实现接口在类声明中使用关键字implements实现接口,当要实现有多个接口时,各接口名以逗号分隔,其形式为: implements 接口1,接口2,,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。一个类可以实现多个接口,以某种程度实现“多继承”。 3、 成员变量和局部变量
5、成员变量(在类体中定义,在整个类中都有效);局部变量(在方法中定义,只在本方法中有效)。 变量(1)成员变量 最简单的成员变量声明的形式为:类型成员变量名; 访问修饰符staticfinaltransientvolatie类型成员变量名;(2)局部变量在方法中声明的变量以及方法中的参数称为局部变量。 (3)如果局部变量名与成员变量名相同,则成员变量被屏蔽。 成员变量与局部变量class Data int x=12,y=5;public void sum() int s; s=x+y; x、y是成员变量,类中所有方法都可以使用它们s是局部变量。仅限于在sum()方法内部使用。如果局部变量名与成员
6、变量名相同,则成员变量被屏蔽。 class Data int x=12,y=5; public void sum() int x=3; /局部变量x屏蔽了成员变量 int s; s=x+y; /s=this.x+y; 3.2.2 成员方法 在Java中,必须通过方法才能完成对类和对象的属性操作。成员方法只能在类的内部声明并加以实现。一般在类体中声明成员变量之后再声明方法。 1、方法声明 返回类型方法名(形式参数)方法体内容 (1) 方法名方法声明包括方法名、返回类型和参数。 (2) 方法体 方法体是一对大括号“”之间的内容。【例3-1】 教材P59图3.7 方法声明与调用的运行结果 方法重载方
7、法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。 【例3-2】教材P60图3.8重载与调用关系 构造方法与类名相同无返回值类型说明可以重载New运算时调用,不能直接调用例3-3,3-43.3 对象类是一个抽象的概念,而对象是类的具体化。类通过实例化生成对象。一个对象的生命周期包括三个阶段: 创建、使用和释放。1、对象的创建创建对象的一般格式为: 类名 对象名 = new 类名(参数列表); (1) 对象声明: 类名 对象名; (2) 实例化: 对象名 = new 构造方法( ); 2、 对象的使用 类是不能
8、直接使用的,我们只能类实例化后的对象。而对象的使用是通过访问对象变量或调用对象方法。 通过运算符“.”可以实现对对象的变量访问和方法的调用。 (1) 访问对象的变量 访问格式: 对象名.成员变量; 例如,设有一个A类其结构如下: class A int x; 对变量x赋值,先创建并实例化类A的对象a,然后再通过对象给变量x: A a = new A(); a.x=5; (2) 调用对象的方法 调用格式:对象名.方法名(参数列表); 【例3-5】用带参数的成员方法计算长方体的体积。【例3-6】用对象作为方法的参数计算圆柱体3、 对象的释放一般是JAVA的垃圾收集器自动回收可以使用 System.
9、gc(); 要求回收,只提高回收线程的优先级可以重载Object类的finalize()方法,将一些最后处理工作放在里面3.4 面向对象特性java语言中有三个典型的面向对象的特性:封装性、继承性和多态性 。关于封装性封装的三大好处专业分工隐藏信息/实现细节访问权限控制 Package(包)功能:将一组java文件组织在一起强内聚弱耦合创建独一无二的包名Java 包的命名规则全部使用小写字母,包括中间的字也是如此按照惯例,package名称的第一部分是反顺序的类的创建者的Internet 域名。导入包(import)Access Control(访问控制)属性的访问控制public访问权限:任
10、何地方的类都可以访问到。protected访问权限:在同一个包中的类可以访问;包外的子类可以继承,但不能访问。默认包访问权限: 在同一个包中的类可以访问到。private访问权限:只能在定义它的类里访问。类(普通类,非内部类)的访问控制public访问权限: 任何地方的类都可以访问到。默认包访问权限:在同一个包中的类可以访问到。Access Control(访问控制)方法的访问控制public访问权限: 任何地方的类都可以访问到protected访问权限:在同一个包中的类可以访问;包外的子类可以继承,但不能访问。默认包访问权限: 在同一个包中的类可以访问到private访问权限: 只能在定义它
11、的类里访问当一个类可以被访问时,对类内的成员变量和成员方法而言,其应用范围可以通过施以一定的访问权限来限定。 同一个类中 同一个包中 不同包中的子类 不同包中的非子类(任意类)privatedefaultprotectedpublic关于继承性子类是父类更加详细的分类是一种一般化与特殊化的关系Java 的标准根源类java.lang.Object 进行继承继承的目的是实现代码复用Java只支持单根继承只是采用它的形式并在其中添加新代码,对父类进行扩展,表示“is-a”关系1.子类的定义定义一个父类class 父类名 定义一个子类class 子类名 extends 父类名 我们就说子类继承父类
12、1.子类的定义【例3-7】创建一个A类和它的子类B类,我们通过子类B的实例对象调用从父类A继承的方法。( 教材P68)2.成员变量的隐藏和方法的重写子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和方法【例3-8】当子类中的变量名与父类的相同,父类的变量被遮盖。class Aclass B extends A static int data_a=3; static int data_a = 5;class C extends B void print_out() System.out.println(“data_a= ”+data_a); System.out
13、.println(“A.data_a= ”+A.data_a); System.out.println(“B.data_a= ”+B.data_a); class demo public static void main(String args) C c = new C(); c.println_out(); data_a=5A.data_a=3B.data_a=5super关键字概念代表当前对象的父对象的引用用法:直接父类对象的引用,访问父类的成员变量和方法显式的调用父类的构造函数注意由JVM自己处理继承中实例的创建顺序第一步: 超类成员变量/超类初始化块(按排列顺序)第二步: 超类构造方法
14、第三步: 子类成员变量/子类初始化块(按排列顺序)第四步: 子类构造方法注:按排列顺序是指哪个代码写在前面就先初始化谁多态性类方法的重载是一种多态性。除此之外,多态性还可以是指在程序中需要使用父类对象的地方,都可以用子类对象来代替。例如:public class Employee extends Objectpublic class Manager extends Employee则:Employee e = new Manager(); /合法语句 对多态的正确理解相同的事物,调用相同的方法,参数也相同,但是表现出来的行为却不同多态通过分离“做什么”和“怎么做”多态能够改善代码的组织结构和可
15、读性,使得程序有良好的扩展性多态也称为动态绑定(dynamic binding)、后期绑定 (late binding)或运行时绑定(run-time binding)多态的三个含义子类都能以父类的身份出现子类以父类的身份出现,但是做事情时,还是用自己的方式来实现子类以父类的身份出现时,自己特有的属性和行为将不能使用多态的运用多态参数多个方法的参数,具有相同的父类,则以父类的名义来声明方法的参数,由于子类都能以父类的身份出现,所以方法只要定义一次就可以适应各个子类了异类集合多个变量,具有相同的父类,则以父类的名义来声明集合的类型,由于子类都能以父类的身份出现,所以集合中可以保存各个子类的实例f
16、inal:到此为止final在类之前表示该类是最终类,不能再被继承。final在方法之前表示该方法是最终方法,该方法不能被任何派生的子类覆盖。final在变量之前表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。static 在变量或方法之前,表明它们是属于类的,称为类方法(静态方法)或类变量(静态变量)。若无static修饰,则是实例方法和实例变量。类变量在各实例间共享class ABCD char data; static int share_data;class Demo ABCD a,b,c,d;object achar dataobject cchar dataObject
17、 bchar datastatic intshare_dataobject dchar datastatic:类变量和类方法类变量的生存期不依赖于对象,相当于C语言中全局变量的作用。其它类可以不用通过创建该类的实例,直接通过类名访问它们。public class StaticVarpublic static int number 5;public class OtherClasspublic void method() int x = StaticVar.number;static类方法则相当于C语言中的全局函数,其他的类也可以直接通过类名来访问类方法。(Java程序的入口方法main()就是
18、一个类方法)public class GeneralFunctionpublic static int addUp(int x,int y)return x+y;public class UseGeneralpublic void method()int a = 9;int b =10;int c = GeneralFunction.addUp(a,b);static 同一个类的实例方法可以访问该类的类变量和类方法; 而类方法只能访问该类的类变量和类方法,不能直接访问实例的变量和方法。static 不正确的引用class StaticError String mystring=“hello”;
19、 public static void main(String args) System.out.println(mystring); 编译时错误信息: nonstatic variable mystring cannot be referenced from a static context “System.out.println(mystring);”。为什么不正确:只有对象的方法可以访问对象的变量。static解决的办法1. 将变量改成类变量class NoStaticError static String mystring=“hello”; public static void mai
20、n(String args) System.out.println(mystring); static解决的办法2. 先创建一个类的实例class NoStaticError String mystring=“hello”; public static void main(String args) NoStaticError noError; noError = new NoStaticError(); System.out.println(noError.mystring); staticstatic【例3-9】【例3-10】Abstract 抽象类抽象类的形式如下:Abstract cla
21、ss类名/定义抽象类 成员变量; 方法();/定义普通方法 Abstract方法();/定义抽象方法Abstract 抽象类抽象类有以下特点:(1)抽象类中可以包含普通方法,也可以包含抽象方法;还可以只有普通方法,而没有抽象方法(2)抽象类中的抽象方法是只有方法声明,不能有代码实现的空方法(3)抽象类不能被实例化(4)若某个类包含了抽象方法,则该类必须被定义为抽象类(5)由于抽象方法都是没有完成代码实现的空方法,因此,抽象类的子类必须重写父类定义的每一个抽象方法【例3-11】3.5 接口和包 3.5.1接口接口是抽象类的一种,只包含常量和方法的定义,而没有变量和具体方法的实现。方法都是抽象方法
22、 常量系统默认: public final static 方法系统默认:public abstract3.5.1接口(1)通过接口实现不相关类的相同行为,而无须考虑这些类之间的关系(2)通过接口指明多个类需要实现的方法(3)通过接口了解对象的交互界面,而无须了解对象所对应的类1、 接口的定义接口的定义包括接口声明和接口体。接口定义的格式如下:public interface 接口名extends 父接口名 /接口体 一个接口可有多个父接口,用逗号隔开,而一个类只能有一个父类2、 接口的实现 在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必
23、须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。【例3-12】 接口可以增加很多类都需要实现的功能,不同的类可以使用相同的接口,同一个类可以实现多个接口接口只关心功能,并不关心功能的具体行为因此,接口的思想在于它可以具有很多类都需要实现的功能,使用相同接口的类之间不一定有继承关系。【例3-13】 【例3-14】 3.5.2包 package和import语句Package 用于指出class文件路径package class文件路径;Import 用于引用包的类 一个包中通常有多个类,就用 * 号代替Import语句import类似于C中的inclu
24、de语句 Import java.io.*; Import java.applet.*;包 package包不仅是命名空间机制,也是访问控制机制。 Java通过包,将命名空间分隔成很多独立的小块,一组相关的类和接口存放在一个独立的包内,从而和其它包中的类或接口区分开。包的使用第一步建立和包同名的目录。包和文件系统目录一一对应,有一个包,就有一个和其对应的文件系统目录。包内的所有类或接口都必须在与包同名的目录下。 第二步在类或接口所在文件的最前面声明类或接口所在的包。包的声明格式如下:package 包名1.包名2.包名n;引用包通过import将包引入程序中,其格式如下:import 包名1.
25、 .包名n.类名;或import 包名1. .包名n.*;Java自动引入的包当前包。缺省包,缺省包是无名包。java.lang包,Java基本的语言功能保存在这个包中Package 语句public class bpublic void print() System.out.println(package test); 例1 : public class apublic static void main(String args ) b b1=new b(); b1.print(); 编译a.java 则自动产生a.class和b.class例2:在当前建立目录:abcxyz.Import abc.xyz.*;public class apublic static void main(String arg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童成长陪伴型产品市场研究报告
- 2025超市摊位租赁合同
- 2025数字探伤代理销售合同
- 苹果幼儿园课程设计
- 桥梁施工机械租赁协议
- 渝中镂空玻璃楼梯施工方案
- 家庭装修腻子粉施工协议
- 核电站混凝土路面施工合同
- 游乐园施工二级建造师合同样本
- 铁人三项净水设备租赁合同
- 统计软件SPSS教案(全)
- 苏科版一年级心理健康教育第17节《生命更美好》课件(定稿)
- 关于父子关系证明
- 多层框架结构PKPM设计步骤及平法施工图绘制(湘潭大学)
- 小学体质健康测试教案合集
- 管理线性规划入门形考答案
- 个人劳动仲裁委托书(5篇)
- 商务英语培训(入门篇)课件
- 矿业公司管理制度(全册参考范本)
- GB∕T 18387-2017 电动车辆的电磁场发射强度的限值和测量方法
- 布袋除尘器培训资料
评论
0/150
提交评论