版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA编程基础
——面向对象高级特性第六章面向对象高级特性目标:
介绍Java中类的继承,封装,多态,方法的覆盖,抽象类、接口及内部类等面向对象的高级特性。通过本课的学习,学员应该掌握如下知识:1)类的继承、封装、多态2)抽象类及接口3)引用数据类型的转换4)访问权限修饰符的使用5)final关键字教学方法:讲授ppt+上机练习本章要点类的继承继承的规则子类的构造器Java中的包和访问修饰符方法的覆盖引用数据类型的转换向下转型向上转型多态特征动态绑定抽象类和接口定义抽象方法区别Final关键字内部类Contents类的继承1Java包的概念2访问权限修饰符3方法的覆盖4引用类型的转换5类的继承类的继承在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承(泛化)。被继承的类称为父类(超类,基类),新的类称为子类(派生类)。子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。使用继承继承的语法和规则继承的语法
示例Employee.java
Worker.java
[修饰符]class子类名extends父类名继承的语法和规则继承的语法
☻
练习Officer.javaTestOfficer.java用java中类的继承机制,实现Officer类,并设计一个测试程序TestOfficer类,来访问Officer类继承的好处使编码更高效易维护代码的重用继承的语法和规则继承的规则Java中只支持单继承,也就是说每个类只能有一个父类,不允许有多重继承一个父类可以有多个子类子类继承父类所有的属性和方法
示例
TestWorker.java子类实例化的过程子类实例化时先实例化其父类,然后实例化子类。要先调用父类的构造器,父类构造器运行完毕,才调用子类的构造器。如果实例化类D,说出构造器执行的顺序。ABCDEsuper和this关键字super()作用:调用父类的构造器只能出现在子类的构造器中,且必须是第一行super()中的参数,决定了调用父类哪个构造器如果子类构造器中没有出现super,那么编译器会默认加上super(),即调用父类的空构造器,如果父类没有空构造器,编译器提示错误。this()作用:调用本类的构造器只能写在构造器的第一行在同一个构造器中super()和this()不能同时出现子类实例化的过程子类的构造器—
子类不能继承父类的构造器使用默认的构造器在子类中的创建构造器示例Worker.java在子类中创建构造器时,必须调用父类的构造器子类可以在自己的构造器中使用super关键字来调用父类的构造器如果使用super关键字调用父类构造器,必须写在该子类构造器的第一行如调用的是父类中无参的构造器,则可以不写super()如果子类中调用了父类无参的构造器,而父类中没有无参构造器则系统编译出错super(参数1,参数2,…);super和this关键字super.指向父类的引用。this.指向本类的引用。类的继承给定以下代码:下列描述哪些是正确的_____?A.编译失败B.代码正常运行
C.在第7行抛出异常D.在第2行抛出异常答案:AContents类的继承1Java包的概念2访问权限修饰符3方法的覆盖4引用类型的转换5Java中的包包的概念及应用在Java中,包主要有以下用途:包允许将类组合成较小的单元有助于避免命名冲突包允许在更广的范围内保护类、数据和方法包可以是类、接口和子包的集合Java中的包包的概念及应用将类放入包中
注意:在java中位于包中的类,在文件系统中的存放位置,必须有与包名层次相对应的目录结构package语句作为java源文件的第一条语句每个源文件只能声明一个包如果没有package语句,则默认为无名包
package
包名;Java中常用的包java.langJava语言包,任何程序中,该包都被自动导入。java.awt图形用户界面包。java.awt.event图形用户界面事件处理包。java.swing跨平台轻量级组件包。Java中常用的包java.sql数据库访问包。java.io这个包由对您的输入/输出操作有用的类组成。java.util该包提供了许多创建如:lists,calendar,date等所需要的类和接口。该包提供了许多进行TCP/IP网络编程的类和接口。import导入包中的类访问其它包中的类包名.路径名使用import关键字引入其它包中的类位于同一包中的类可以直接访问packagetest;importp08.Animal;classCatextendsAnimal{…}packagetest;classCatextendsp08.Animal{…}import导入包中的类访问其他包中的类导入包中所有的类导入子包中所有的类导入包中的某个类
import
包名.*;
import
包名.子包名.*;
import
包名.子包名.类名;Contents类的继承1Java包的概念2访问权限修饰符3方法的覆盖4引用类型的转换5封装信息隐藏,隐藏对象的实现细节,不让用户看到将东西包装在一起,然后以新的完整形式呈现出来例如,两种或多种化学药品组成一个胶囊将方法和属性一起包装到一个单元中,单元以类的形式实现“隐藏属性、方法或实现细节的过程称为封装。”封装封装的目的隐藏类的实现细节让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作便于修改,增强代码的可维护性可进行数据检查示例Employor.javaTestEmployer.java访问权限修饰符访问权限修饰符访问权限修饰符访问权限修饰符用来控制类的成员和类的使用范围类成员的访问权限修饰符:private、default、protected、public类的访问权限修饰符:public、default
示例:Access.javaTestAccess.javaprivatedefaultprotectedpublic同一类√√√√同一包中的类√√√不同包中的子类√√其他包中的类√访问权限修饰符☻练习给定以下代码:
下列选项正确的是?
A.
编译失败B.
成功编译并执行
C.
编译成功,但运行时在ClassTest.java的第5行抛出异常
D.编译成功,但运行时在ClassTest.java的第6行抛出异常
答案:AContents类的继承1Java包的概念2访问权限修饰符3方法的覆盖4引用类型的转换5方法的覆盖方法的覆盖(override)重写(rewrite)对从父类中继承来的方法进行改造在子类继承父类时发生方法覆盖的规则在子类中的覆盖方法与父类中被覆盖的方法应具有相同的方法名相同的参数列表(参数数量、参数类型、参数顺序都要相同)相同的返回值类型子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限示例Worker.java方法的覆盖☻练习
给定下列代码:当在第6行加入什么方法时会引起编译错误?答案:B方法的覆盖☻
练习
给定类,在其子类中下列哪些覆盖方法可以正确的声明_____classA{intmethod1(inta,doubleb){return0;}A.
intmethod1(inta,doubleb){return1;}B.
intmethod1(inta,longb){return1;}C.intmethod1(intb,doublea){return1;}D.
shortmethod1(inta,doubleb){return1:}E.
intmethod1(doubleb,inta){return1;}
答案:ACContents类的继承1Java包的概念2访问权限修饰符3方法的覆盖4引用类型的转换5上溯造型引用数据类型的转换(对象造型)示例:TestStudent.java向上转型(Upcasting)—子类转换为父类,自动转换;前提—具有继承或实现关系向上转换损失了子类新扩展的属性和方法仅可以使用从父类中继承的属性和方法下溯造型引用数据类型的转换示例:TestStudent.java向下转型(Downcasting):强制转换将父类对象显示的转换成子类类型。Animala=newCat();Catc=(Cat)a;instanceof运算符instanceof运算符判断一个类是否实现了某个接口判断一个实例对象是否属于一个类它的返回值是boolean型的示例TestStudent.java
对象
instanceof
接口
对象
instanceof
类Contents多态6抽象类7接口8final关键字9内部类10多态简单来说,多态是具有表现多种形态的能力的特征同一个实现接口,使用不同的实例而执行不同操作彩色打印机
打印机黑白打印机打印效果:彩色打印效果:黑白打印打印多态多态(动态绑定、Polymorphism)不同的对象对同一行为作出的不同响应多态存在的三个必要条件要有继承,或实现要有重写父类引用指向子类对象一旦满足以上3个条件,当调用父类中被重写的方法后,运行时创建的是哪个子类的对象,就调用该子类中重写的那个方法在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用相应的方法多态多态的优点简化代码改善代码的组织性和可读性易于扩展☻示例Parker.javaVehicle.javaBus.javaTruck.javaCar.java在停车场收费系统中,收费者会根据车型的不同收取不同的停车费,其中,客车:15元/小时货车:12元/小时轿车:8元/小时编写java程序完成此功能Contents多态6抽象类7接口8final关键字9内部类10抽象类抽象类抽象类是抽象方法和非抽象方法的集合特殊情况全部是抽象方法全部为非抽象方法[访问权限修饰符]abstractclass类名{……}abtractclassA{Stringname;abstractintmethod1(inta,intb);voidsayHi(){System.out.println(“Hello!”);}抽象方法抽象方法只有方法声明,没有方法实现的方法[访问权限修饰符]abstract返回值类型抽象方法名(参数列表);abstractclassA{
abstractintmethod1(inta,intb);}抽象类的规则抽象类注意:抽象类不能被实例化;其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;抽象方法不能为static;在下列情况下,一个类必须声明为抽象类:
当一个类的一个或多个方法是抽象方法时;当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;抽象类☻练习
给定以下代码:
执行下列哪些操作后,可以让代码通过编译?对methodA方法添加方法体将5~7行,用“;”代替删除class前的abstract关键字删除methodA方法前的abstract关键字删除methodB方法前的abstract关键字答案:BEContents多态6抽象类7接口8final关键字9内部类10接口(interface)接口的声明示例AudioDevice.javaVideoDevice.java接口中只包含常量和抽象方法,而没有变量和方法的实现接口的成员:常量(字段)抽象方法[访问权限修饰符]interface接口名{
接口的成员}接口(interface)接口的声明注意:接口不是一个类,没有构造器,不能被实例化接口使用interface关键字来定义,而不是class接口默认:常量:publicstaticfinal抽象方法:publicabstractinterfaceRunnable{publicabstractvoidrun();}接口(interface)☻练习给定以下代码:下列选项中,哪些选项可以用来替代第2行代码?finalintk=4;publicintk=4;staticintk=4;privateintk=4;abstractintk=4;答案:ABC接口(interface)☻练习
下列选项中,哪些可以定义在一个接口中?答案:AB接口(interface)extendsinterfaceAextendsB{}interfaceinterfaceinterfaceextendsinterfaceAextendsB,C,D{}interfaceextends
扩展接口(接口的继承)示例VADevice.java接口和类的关系类实现接口—implements为了使用一个接口,你要编写实现接口的类如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类多个无关的类可以实现一个接口,一个类可以实现多个无关的接口一个类可以在继承一个父类的同时,实现一个或多个接口示例Television.java接口和类的关系
类的单继承与多实现接口和类的关系类实现接口☻示例Student.javaConsumer.javaPerson.java有一个Student类该类继承了Person类,并实现了Consumer接口该类具有String类型的属性school并有一个study方法,在该方法中,系统可打印出学生在那所学校学习并创建一个测试方法,测试Student类接口(interface)接口的意义:接口可以实现多继承:用接口可以实现混合类型(主类型,副类型),java中可以通过接口分出主次类型主类型使用继承,副类型,使用接口实现接口可以使方法的定义和实现相分离,降低模块间或系统间的耦合性针对接口编程可以屏蔽不同实现间的差异,看到的只是实现好的功能。接口与抽象类的区别接口不能含有任何非抽象方法,而抽象类可以。类可以实现多个接口,但只能有一个父类。接口不是类分级结构的一部分,没有联系的类可以实现相同的接口。Contents多态6抽象类7接口8final关键字9内部类10final关键字final关键字final可以修饰的元素:类:不能被继承变量(属性和局部变量):不能被重新赋值在声明时赋值,或在构造器中赋值系统不会对final属性默认的赋初始值方法:不能在子类中被覆盖,即不能修改。示例Final.javaTestFinal.java练习抽象类与final类的区别?final方法是否可以被子类继承?Contents多态6抽象类7接口8final关键字9内部类10内部类内部类(嵌套类)内部类就是定义在另一个类内部的类。内部类对于同一包中的其它类来说,内部类能够隐藏起来。注意内部类可以访问其外部类中所有的属性和方法无需创建外部类的对象,即可从内部类访问外部类的变量和方法。必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。不能定义static变量内部类类中定义的内部类publicclassOuter{privateintvarOuter=100;classInner{intvarInner=200;publicvoidshowOuter(){System.out.println(varOuter);//是否能够输出?
}}publicvoidshowInner(){Inneri=newInner();System.out.println(i.varInner);}}内部类类中定义的内部类普通类的访问权限修饰符defaultpublic内部类的访问权限修饰符defaultpublicprotectedprivate内部类内部类的访问在Outer内访问Inner,只需如下:在Outer外访问Inner,必须如下:
Innerin=newInner();Ou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《机械制造基础》课件-03篇 第七单元 钻削加工
- 重难点02 含参类方程与不等式问题(解析版)(淘宝店铺:夺魁文化)
- 2025年黔东南道路运输从业人员从业资格考试
- 2025年保山道路运输从业资格证考试
- 2025年景德镇考从业资格证货运试题
- 斑块的治疗与手术护理
- 2025年迪庆道路货物运输从业资格证模拟考试
- 2025年山西年货运从业资格证考试题答案
- 《论文答辩唐勇》课件
- 反比例函数性质课件
- 一年级体育下册 第三课 我与大自然教案
- 中考数学《整式与因式分解》复习教案
- 自贸港生活英语智慧树知到答案2024年海南工商职业学院
- 人教版九年级英语《Unit 10 Youre supposed to shake hands. 》Section A-说课稿1
- 2024-2025学年广西南宁市小学五年级数学上册期末检查试题及答案
- 2024年湖北高考化学真题试题(原卷版+含解析)
- 黑龙江齐齐哈尔市建华区2025届七年级数学第一学期期末达标检测试题含解析
- 费曼学习法课件
- 员工薪酬与福利发放管理制度
- 高中数学- 函数的单调性与导数教学设计学情分析教材分析课后反思
- 2021-2022学年天津市南开区南开大学附属小学人教版六年级上册数学期末测试数学试卷 【带答案】
评论
0/150
提交评论