已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
接口作业2答案 packageinterfaces ex5 publicinterfaceEx5 voidsayOne voidsayTwo voidsayThree packageinterfaces Ex6 importinterfaces ex5 publicclassTestEx5implementsEx5 publicvoidsayOne System out println one publicvoidsayTwo System out println two publicvoidsayThree System out println three publicstaticvoidmain String args Ex5x newTestEx5 x sayOne x sayTwo x sayThree 第11章类的高级特性 11 1包11 2final变量11 3final方法11 4final类11 5内部类 11 1包 类名冲突完整的类路径创建包导入类包 类名冲突 Java中每个接口或类都来自一个包 不论是JavaAPI中的类和接口还是自定义的类与接口都需要隶属某一个包 这个包包含相关的类和接口 包的提出 Java编译器为每一个类或接口生成一个字节码文件 class 为了便于管理数目众多的类和接口 Java语言引入包 Package 的概念 以解决类和接口命名冲突 引用不便 安全性等问题 包 Package 是Java语言提供的组织类和接口的工具 并控制访问权限 即包 Package 是一组相关类和接口的集合 Java编译器把包对应于文件系统的文件夹来管理 因此包中可包含类的定义或子包 其嵌套层数也没有限制 完整的类路径 一个完整的类名需要包名和类名的组合 任何一个类都隶属于一个包中 只要保证同一包中的类不同名 这样就有效的避免了同名类冲突的情况 在类中指定包语法格式如下 语法 Package包名在类中创建包时 需要使用package关键字指定包名 当指定包名的类编译后 在讲当前的工作位置中出现相应包名所对应的路径 在类中指定包名时需要将package表达式放置在程序的第一行 它必须是文件中的第一行非注释代码 当使用package关键字为类指定包名之后 包名将会成为类名中的一部分 预示着所有需要使用这个类的人都必须指定全名 导入类包 1 使用import关键字导入包import关键字的语法格式如下语法 importcom wsy importcom wsy Math在使用import关键字时 可以指定类的完整描述 如果为了使用包中更多的类 可以再使用import关键字指定时在包指定后加上 这表示可以在程序中使用所有类 导入包类 2 使用import导入静态包类import关键字除了导入包之外 还可以导入静态成员 这是在JDK5 0以上的版本提供的新功能 导入静态成员可以使程序员更为方便 Import导入静态成员语法格式如下 语法 importstatic静态成员importstaticjava lang Math max 导入静态成员方法importstaticjava lang System out 导入静态成员变量 final final在Java中并不常用 然而它却为我们提供了诸如在C语言中定义常量的功能 不仅如此 final还可以让你控制你的成员 方法或者是一个类是否可被覆写或继承等功能 这些特点使final在Java中拥有了一个不可或缺的地位 也是学习Java时必须要知道和掌握的关键字之一 你可能出于两种理解而需要阻止改变 设计或效率 final 1 final类final类不能被继承 因此final类的成员方法没有机会被覆盖 默认都是final的 在设计类时候 如果这个类不需要有子类 类的实现细节不允许改变 并且确信这个类不会再被扩展 那么就设计为final类 2 final方法如果一个类不允许其子类覆盖某个方法 则可以把这个方法声明为final方法 使用final方法的原因有二 第一 把方法锁定 防止任何继承类修改它的意义和实现 第二 高效 编译器在遇到调用final方法时候会转入内嵌机制 大大提高执行效率 3 final变量 常量 用final修饰的成员变量表示常量 值一旦给定就无法改变 final修饰的变量有三种 静态变量 实例变量和局部变量 分别表示三种类型的常量 11 2final变量 Final关键字可以使用在变量声明时 标识该变量一旦设定后 就不可以改变该变量的值 Final除了可以修饰基本数据类型的常量外 还可以修饰对象引用 由于数组也可以被看做一个对象引用 所以final可以修饰数组 Final常量用大写字母命名例子S1 11 3要使对象的值不可改变 将常量声明为staticfinal 在装载时对象的变量被初始化 而不是每次创建新对象时被初始化 例子S1 11 4 11 3final方法 定义为final的方法不能被重写 final可以防止任何子类修改该类的定义与实现方法 同时定义为final的方法执行效率要高于非final方法 例子 S1 11 5注 父类中被定义为privatefinal的方法无法被子类覆盖 因为父类是private修饰符 子类将无法访问该方法 如果父类与子类方法同名 那么认为子类的方法是单独生成的一个新的方法而已 11 4final类 定义为final的类不能被继承 类中的所有方法都被隐式设置为final形式 但是final类中的成员变量可以被定义为final或非final形式 final类的语法格式如下语法 final类名 finalclass只能实例化 不能被继承 与Abstractclass正好相反 只能被继承 不能实例化 例子S1 11 6 11 5内部类 一个类嵌套定义于了另一个类中 称为内部类 也称作嵌套类 包含内部类的类称为外部类 与一般的类相同 内部类可以具有实例变量和实用方法 使用java内部类 有如下好处 1 隐藏你不想让别人知道的操作 也即封装性 2 非静态内部类可以访问外部类的内容 甚至私有成员变量3 可以实现多继承4 减少命名的冲突 内部类 成员内部类局部内部类匿名类静态内部类内部类的继承 成员内部类 在一个类中使用内部类可以在内部类中直接存取其所在类的私有成员变量 成员内部类的语法格式如下 语法 publicclassOuterClass 外部类privateclassInnerClass 内部类 例子S1 11 7 内部类和外部类访问的规则 内部类作为外部类的成员 可以使用所有的四种权限控制符 private内部类可以隐藏在外部类的里面 不被其它类访问 内部类的方法能够访问外部类的成员 包括private修饰的成员 且不必实例化外部类 这是我们使用内部类的一个重要原因 反过来则不行 外部类访问内部类的成员必须先实例化内部类 通过内部类对象来访问 Java规定在非静态内部类中不能定义静态成员 只能定义非静态成员 但在静态内部类中既可以定义静态成员 又可以定义非静态成员 如果内部类中有和外部类同名的变量或方法 则内部类的变量和方法将获得比外部类的变量和方法更高的优先级 内部类的方法能够访问外部类的成员 包括private修饰的成员 且不必实例化外部类 这是我们使用内部类的一个重要原因 反过来则不行 外部类访问内部类的成员必须先实例化内部类 通过内部类对象来访问 publicclassOuter privateintvarOuter 100 classInner intvarInner 200 publicvoidshowOuter System out println varOuter publicvoidshowInner Inneri newInner System out println i varInner 内部类和外部类访问的规则 内部类和外部类访问的规则 1 从本类中访问内部类在Outer内访问Inner 只需如下 Innerin newInner 2 从其他类访问内部类在Outer外访问Inner 必须如下 Outero newOuter Outer Inneroi o newInner 2 内部类向上转型为接口 外部提供一个接口 在接口中声明一个方法 如果在接口的内部类中实现该接口的方法 就可以定义多个内部类以不同的方式实现接口中同一个方法 而在一般类中是不能多次实现接口中同一个方法的 例子S1 11 8如果某个类继承了外部类 由于内部的权限不可以向下转型为内部类InnerClass 同时 也不能访问f 方法 但是却可以访问接口中的f 方法 这样 很好地对继承该类的子类隐藏了实现细节 仅为编写子类的人留下一个接口和一个外部类 同时 也可以调用f 方法 但是f 方法的具体实现过程却被很好地隐藏了 这就是内部类最基本的用途 3 使用this关键字获取内部类与外部类的引用 在内部类中使用this x语句可以调用内部成员变量x 而使用外部类名称后跟一个点操作符和this关键字便可获取外部类的一个引用 例 s1 11 9publicclassTheSameName privateintx privateclassInner privateintx 9 publicvoiddoit intx x this x TheSameName this x 局部内部类 内部类不仅仅可以在类中进行定义 在类的局部位置也可以定义内部类 例如在类的方法中或任意的作用域中可以定义内部类 例子 S1 11 10interfaceOutInterface2 定义一个接口 classOuterClass3 publicOutInterface2doit finalStringx doit 方法参数为final类型classInnerClass2implementsOutInterface2 在doit 方法中定义一个内部类InnerClass2 Strings s x System out println s returnnewInnerClass2 doit 内部类编译后生成class文件有2个 OuterClass3 class OuterClass3 1InnerClass2 class内部类的命名规则 外部类名 内部类名 匿名内部类 匿名内部类 没有类名的内部类 匿名内部类的所有实现代码都需要在大括号之间进行编写 匿名类语法格式如下 语法 returnnewA 内部类体 匿名内部类的一个例子 interfaceOutInterface3 定义一个接口 publicclassOutclass4 publicOutInterface3doit returnnewOutInterface3 privateinti 0 publicintgetValue returni 匿名内部类编译后生成class文件有2个 OuterClass4 class Outclass4 1 class外部类名 数字 app addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente System exit 0 images addItemListener newItemListener publicvoiditemStateChanged ItemEvente label setIcon icons images getSelectedIndex 匿名内部类的两个例子 可以实现多重继承 packagebeyondx publicclassExample1 publicStringname return luffyke packagebeyondx publicclassExample2 publicintage return25 packagebeyondx publicclassMainExample privateclasstest1extendsExample1 publicStringname return
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《生物安全管理要求》课件
- 《生物质碳化技术》课件
- 2025年宇宙生命之谜
- 2024-2025学年浙江省丽水市“五校高中发展共同体”高一上学期10月联考历史试题(解析版)
- 单位管理制度集粹汇编【员工管理篇】
- 2025年高考数学一轮复习之常用逻辑用语
- 单位管理制度汇编大合集【员工管理】十篇
- 单位管理制度合并汇编职工管理十篇
- 2024春节放假安全风险应急预案范文(32篇)
- 《穴盘育苗技术》课件
- 针灸推拿学100512练习题库与参考答案
- 常用截面惯性矩与截面系数的计算
- 行车工考试试题
- 小儿头皮静脉输液课件
- 电力电缆高频局放试验报告
- 肺病科主任年度述职汇报
- 2023年福建省晋江市数学七年级第一学期期末学业质量监测试题含解析
- 水利水电工程基础坑隐蔽工程验收证书
- 余热发电工程总施工组织设计方案
- 建设工程监理费计算器(免费)
- 希望点-列举法
评论
0/150
提交评论