




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章JAVA面向对象程序设计基础知识-知识回顾与疑点解析4.1 面向对象的基本概念4.1.1 面向对象编程的概念封装,继承,多态是面向对象的三个特性。封装:encapsulation继承:inherit,Java只支持单继承,使用关键字extends多态:polymorphic,多态分为静态多态(方法重载等)以及动态多态(方法重写等);父类中定义的属性或方法可以被子类继承之后具有不同的数据类型或者表现出不同的行文,同一个属性或方法在父类及其各个子类中可以具有不同的语义。关于多态性描述的证明如下:1) 对于Override注记标识的方法重写,必须与父类中的申明一模一样,包括返回值的类型该测试表示Override重写的方法必须与父类中的申明一模一样,但若无虽然无Override注记,但是与父类中的函数名,函数参数个数,类型,对应顺序一样,则返回值也必须一模一样,此时,没有Override也和有一模一样;此外如果其其他类型的重写,则必须不能使用Override注记。2)重写属性具有不同的数据类型在该测试中,属性a被重写,父类中是int类型,但是在子类中则为String类型。3) 重写方法表现不同的行为在该测试用例中,getA(String s)方法即是对getA()方法的重载。4.2 类的定义4.2.1 类的声明public|缺省即default abstract|final class 类名 extends 父类 implements 借口列表。说明:class的声明若是public的,则该类可以被所有的类(包括同一个包和不同包下的类)所引用;若是缺省的,则该类只能被同一个包下的类所访问;若类修饰是abstract的,则该类必须被继承而不是被new实例化一个对象;若该类的修饰符是final的,则该类必须不能被继承,即该类不能派生出子类。4.2.2 类体的申明类体在一对大括号中进行声明,包括属性和行为的声明,格式如下:public|protected|private|缺省即default staticfinal transient volatile类型 变量名;public|protected|private|缺省即default staticfinal|abstract native synchronized返回类型 函数名(参数列表) throws 异常列表函数体声明说明:对于属性声明:1) 如果是声明为public类型的,则任何包下的的任何类可以通过该类的实例访问该属性。以上测试表明,package a中公共类A可以被package b中的类所import并创建A的实例,并且在package b中可以通过类A实例访问a的公共属性。2) 如果声明是为protected类型的,则同一包下的任何类均可通过该类的实例访问该属性;同一包的该类的子类讲继承自该类的protected继承为自己的protected成员;不同包的该类的子类将继承自该类的protected成员继承为自己的private成员。protected类型的测试最为麻烦和复杂,测试截图如下:在该测试中,package a 中的类A的子类AAA继承A的protected成员a为自己的protected属性a,所以在同一包下的Main方法中可以通过AAA实例的对象访问该成员,而在package b 中的A的子类BB将父类A中的protected属性继承为自己的private成员,因而在同一包下的类B中无法通过BB的实例访问其自己的private属性a。3) 如果声明是为private类型的,则该属性只能在该类中的方法中被访问,也就是说该类实例不能够通过点操作符访问。这一点是最严格不过的了,我想应该就不必测试了。4) 如果声明为缺省类型的,则该属性可以在该包下的任何类中通过该类的实例进行访问。作为最好的对照,在第一问的测试中,讲类A中a成员的public去掉(缺省)则,结果如下图所示:结果表明,公共类A的default属性也只能被同一个包下的Main类所访问,而不能被package b下的B类所访问(尽管能够import并实例化公共类A)。4)static将成员声明为类成员,即所有对象所共享的成员,但是只要一份,不需要依赖一对象而存在。final将成员声明为常亮,一个final类型的对象不能声明为volatile(我想这是因为volatile修饰的成员是因为易变性而需要保证内存可见性,而final类型成员不存在内容可见性问题);transient变量声明为短暂性的变量,用于不同对象的串行化功能。5)通过对属性的声明的分析,可以得到如下结论:对于一个类,如果变量需要最严格的保护,为自己私有,并且不想被对象在类外直接访问,那就将此变量声明为private类型的;如果该变量需要能够被同一包下的所有类通过该类的类实例所访问的话,就将该变量声明为default类型的;如果还需要能够被不同包下的子类所继承为private类型,那么就应该将该变量声明为protected类型的;如果想要该变量的访问不受任何限制,就将该变量声明为public类型的。将一个变量声明为什么类型,需要根据该变量的被访问范围来决定。对行为的声明:1) public修饰的方法可以在任何其他类中通过该类的实例调用2) protected修饰的方法可以被同一包中的任何类通过该类的实例访问;该类同一包下的子类将protected方法继承自己的protected类型;该类不同一包下的子类继承该protected方法为自己的private类型以上代码证明,在类AAA继承自同一包下的类A的protected方法为自己的protected方法,从而能够在同一包下的Main方法通过类AAA的实例访问sayHello方法;同时在不同包下的类A类子类BB将该protected方法继承为自己的private方法,所以在类B中不能通过BB的对象访问sayHello方法。3) private修饰的方法只能在该类内部由其他成员函数调用4) static修饰的方法为类方法,可以通过类名和该类的实例调用,但是在static方法内不能访问类的实例变量,必须通过对象才能访问在类A中有一个方法sayGoodBye被声明为protected static类型,在同一包下载在类AA中通过类名A调用了该保护类型的静态类方法,但是在不同包下的类B中却不能通过类名访问其他包下的保护类型静态类方法。5) final修饰的方法不能被子类所重写6) abstract修饰的方法必须无方法体,其子类必须实现该抽象方法;抽象方法只能由抽象类即abstract关键字修饰的类定义;在抽象类中也可以有非abstract方法,也可以有其他成员。并且抽象类中的抽象方法必须只能是public或protected类型的,或者缺省类型的;但是若类型是default类型的话,在其他的包中的该类的子类就会出现进退两难的尴尬地位,从而不能不将该抽象类的方法修改为对其他包可见的。上述测试表明,abstract方法只可能定义在abstract类AC中,并且abstract类AC中也可以有非abstract方法的实例方法和其他实例成员变量。其中在同一包下的AC1子类中,必须实现两个父类的抽象方法,但是对于不同包下的子类AC2就没有这么辛运了,其中一个public的abstract方法sayGoodMorning被正确的重写了,但是由于sayGoodEvening是AC类的default方法,导致在类AC2中不可见,也就无法实现重写,所以AC2类的定义就无法实现和完成。综上所述:抽象方法只能定义在抽象类中;抽象类只能用于派生子类;抽象类中的抽象方法必须被子类所重写;抽象类中可以有其他的实例方法和实例成员变量。在定义抽象类的时候一定要考虑子类所需要的抽象方法。7) native修饰的方法为本地方法,即方法的实现与本地计算机系统相关,native修饰的方法也无方法体8) synchronized修饰的方法为同步方法9) 函数的返回值必须和声明中的返回类系统一致,要么是一模一样,要么是其子类的对象,当返回值是一个接口时,必须是一个实现了该接口的类的实例以上的测试表明,返回接口的函数必须返回实现了该接口的一个类的类实例,返回一个类类型的方法必须返回该类的类实例或者该类子类的类实例。4.2.3 实例化对象的步骤1) 为对象分配内存空间2) 初始化实例变量的值3) 调用对象的构造函数4.2.5 对象的清除垃圾收集器作为一个线程运行,当系统的内存用尽或者在程序中调用System.gc()要求运行垃圾收集时,垃圾收集器线程与系统同步运行,否则垃圾收集器在系统空闲时异步运行。在对象作为垃圾被收集器释放之前,Java运行时系统会自动调用对象的方法finalize(),使他清除自己所使用的资源。4.2.6 方法的重载与重写所谓方法的重写是指子类重写父类中定义过的方法,重写的方法声明必须与父类中的一模一样。所谓方法重载是指同一个函数名称的两个函数在参数列表中不完全一样,此处不包含对返回值得讨论,即函数的返回值不能参加重载的判断。4.3 类对象的使用4.3.2 实例方法和类方法关于类方法的使用有如下一些限制:1) 不能使用this,super关键字2) 不能访问实例变量和实例成员函数4.4 包package1)java系统应至少支持一个无名包(也叫默认包),一般为当前目录。2)package语句作为Java源文件的第一条语句,指明该文件中所定义的类所在的包。从类文件中package字段可以看出包层次的根目录。3)当用户使用-cp选项将应用的类库包含进来的时候,可以认为-cp的选项是将所有被引用的包放在项目路径之下而成为项目的一部分(即放在包的根目录下,即根包下)。4.5 成员变量及方法的访问权限访问权限同一个类同一个包不同包子类不同包非子类private可以default可以可以protected可以可以可以public可以可以可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国沼气增压泵行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国油炸面糊行业消费趋势及未来投资动向建议研究报告
- 生育健康与妇科护理试题及答案
- 2024年护士资格证考试新技术护理知识试题及答案
- 物流运筹学试题及答案
- 构建系统规划与管理师考试的学习计划试题及答案
- 2024年度护士资格证答题技巧提升的试题及答案
- 二零二五劳务派遣合同简单的
- 二零二五工程安全协议安全责任协议书
- 劳动合同国际劳务派遣合同
- 合理应用抗生素的培训
- 2025年山东省聊城市冠县中考一模地理试题(原卷版+解析版)
- 使用错误评估报告(可用性工程)模版
- TSG 23-2021 气瓶安全技术规程 含2024年第1号修改单
- 中国特色社会主义理论体系的形成发展PPT2023版毛泽东思想和中国特色社会主义理论体系概论课件
- 呆滞物料的管理规定
- 喜来登酒店设施及面积分配表
- 商业地产-租金测算表950354217
- 胸腔积液的诊断和治疗ppt课件
- A4标签打印模板
- 腐蚀试验方法PPT课件
评论
0/150
提交评论