第8章 继承 抽象类和接口_第1页
第8章 继承 抽象类和接口_第2页
第8章 继承 抽象类和接口_第3页
第8章 继承 抽象类和接口_第4页
第8章 继承 抽象类和接口_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主要内容 8 1类的继承8 2抽象类8 3接口8 4内部类和匿名类8 5包 类的说明符 类的访问说明符 1 public 2 friendly 不加访问说明符时 类的其它修饰符 1 final 2 abstract 类的继承 理解继承是理解面向对象程序设计的关键 在Java中 通过关键字extends继承一个已有的类 被继承的类称为父类 超类 基类 新的类称为子类 派生类 子类可以有自己的成员方法及成员变量如何访问 在Java中 不允许多继承 特殊变量super 特殊变量super 提供了对父类的访问 可以使用super访问父类被子类隐藏的变量或覆盖的方法 每个子类构造方法的第一条语句 都是隐含地调用super 如果父类没有这种形式的构造函数 那么在编译的时候就会报错 classperson publicperson inti System out println creatingperson i classstudentextendsperson classtest publicstaticvoidmain Stringargs personp newperson 2 判断 程序将输出 creatingperson2 classperson publicperson System out println person classstudentextendsperson publicstudent System out println student classtest publicstaticvoidmain Stringargs newstudent newperson 写出右边程序的输出结果 classperson publicintm1 publicperson intd m1 d classstudentextendsperson publicintm2 publicstudent intds intd 初始化m1为ds的值m2 d classtest publicstaticvoicmain Stringargs students newstudent 2 3 System out println s m1 s m2 1 给划线出填上合适的语句 2 请给出程序运行结果 方法的覆盖 override 在子类中定义一个与父类同名 返回类型 参数类型均相同一个方法 称为方法的覆盖 覆盖发生在子类与父类之间 出现覆盖时允许用父类的变量访问子类的成员静态方法 final修饰的方法均不可被覆盖 下面哪个方法定义于划线处会导致编译错误 classperson publicfloatgetNum return3 0f publicclassstudentextendsperson A publicfloatgetNUm return4 0f B publicvoidgetNUm C publicvoidgetNum doubled D publicdoublegetNum floadd return4 0d publicclassstudentextendsperson publicvoidset System out println student publicstaticvoidmain Stringargs Objecta newstudent person a set 请给出程序运行结果 classperson publicvoidset System out println person classperson voidset System out println inperson staticvoidget System out println inpersonget classstudentextendsperson voidset System out println instudent staticvoidget System out println instudentget personst1 newstudent st1 set st1 get studentst2 newstudent st2 set st2 get 请给出程序运行结果 classperson publicintm 5 publicvoidprint System out print m classstudentextendsperson publicintm 2 publicvoidprint System out print m personp newstudent p print System out println p m 执行如下语句后的结果是 classperson publicvoidset System out println person classstudentextendsperson publicvoidset System out println student publicstaticvoidmain Stringargs mstudentms newmstudent classmstudentextendsperson publicvoidset System out println mstudent 划线处填写适当语句以输出 person classperson classstudentextendsperson publicvoidset System out println student publicstaticvoidmain Stringargs personp newstudent 划线处填写哪个语句能输出 student A p set B person p set C student p set D student p set Object类 equals 方法toString 方法getClass 方法instanceof运算符getClass getName 方法getClass getSupername 方法 classperson voidset System out println person set voidfun System out println person fun this set classstudentextendsperson voidset System out println student set begin super fun System out println student set end 执行下列语句后程序的输出是 students newstudent s set final方法 为了确保某个函数的行为在继承过程中保持不变 并且不能被覆盖 overridden 可以使用final方法 为了效率上的考虑 将方法声明为final 让编译器对此方法的调用进行优化 要注意的是 编译器会自行对final方法进行判断 并决定是否进行优化 通常在方法的体积很小 而我们确实不希望它被覆盖时 才将它声明为final class中所有的private和static方法自然就是final classperson publicfinalvoidset System out print 1 classstudentextendsperson publicfinalvoidset inti System out print i students newstudent s set s set 2 执行上述程序后 结果为 输出 12 无法编译 因为具有final属性的方法不能被覆盖无法通过编译 因为方法调用有问题可以通过编译 但无法正常运行 抽象方法和抽象类 在类中没有方法体的方法 就是抽象方法 含有抽象方法的类 即为抽象类 如果一个子类没有实现抽象基类中所有的抽象方法 则子类也成为一个抽象类 抽象类中可以包含一般方法及构造方法 且能被其子类正常调用静态方法 私有方法 final方法不能被声明为抽象的方法 classperson publicabstractvoidset classstudentextendsperson publicvoidset System out print 1 classworkerextendsperson publicvoidset System out print 2 personp newstudent p set p newworker p set 执行上述程序后 结果为 输出 12 输出 11 无法通过编译 因为类型转换不合法无法通过编译 因为person的定义不对 abstractclassperson intset return5 classtest publicstaticvoidmain Stringargs persona newperson personb newperson System out println a set b set 若下列程序是否能正常运行 则写出运行结果 否则指出错误之处 并修改 接口 接口中所有的方法默认为publicabstract 在接口中声明方法时 不能使用native static final synchronized private protected等修饰符 接口中的成员变量一定要赋初值 且不能被修改 默认修饰符为publicstaticfinal 接口与抽象类的区别 不可有一般方法 interfaceMath doublePI 3 1415926 classArithmeticimplementsMath doubleroundArea doubleradius returnPI radius radius Arithmetica newArithmetic 判断以下语句有无错误 A System out println a roundArea 3 B System out println Math PI C System out println Arithmetic PI D System out println a PI 接口 一个接口可以继承自另一个接口 Java中不允许类的多继承 但允许接口的多继承 interfaceSittable voidsit interfaceLie voidsleep interfaceChairextendsSittable interfaceSofaextendsSittable Lie 接口 在Java中 一个类可以实现多个接口 一个类在继承另外一个类的同时 可以实现多个接口 实现多个接口interfaceSittable voidsit interfaceLie voidsleep classSofaimplementsSittable Lie publicvoidsit publicvoidsleep Sofa java 在继承类的同时 实现多个接口interfaceSittable voidsit interfaceLie voidsleep interfaceHealthCare voidmassage classChairimplementsSittable publicvoidsit classSofaextendsChairimplementsLie HealthCare publicvoidsleep publicvoidmassage 内部类 在一个类中定义另外一个类 这个类就叫做内部类或内置类 innerclass 内部类可以让我们将逻辑上相关的一组类组织起来 并由外部类 outerclass 来控制内部类的可见性 当我们建立一个innerclass时 其对象就拥有了与外部类对象之间的一种关系 这是通过一个特殊的thisreference形成的 使得内部类对象可以随意的访问外部类中所有的成员 内部类 在方法中定义的内部类 如果要访问方法中定义的本地变量或方法的参数 则变量必须被声明final 内部类可以声明为private或protected 还可以声明为abstract或final 内部类可以声明为static的 但此时就不能再使用外部类的非static的成员变量和非static的成员方法 非static的内部类中的成员不能声明为static的 只有在顶层类或static的内部类中才可声明static成员 内部类 我们为什么使用内部类1 在内部类 innerclass 中 可以随意的访问外部类的成员 这可以让我们更好地组织管理我们的代码 增强代码的可读性 2 内部类可以用于创建适配器类 适配器类是用于实现接口的类 使用内部类来实现接口 可以更好地定位与接口关联的方法在代码中的位置 3 内部类的更多用法 包 package 为了便于管理大型软件系统中数目众多的类 解决类命名冲突的问题 Java引入了包 package 包 package package语句必须是文件中的第一条语句 也就是说 在package语句之前 除了空白和注释之外不能有任何语句 如果不加package语句 则指定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论