java程序设计之面向对象程序设计基础(下)_第1页
java程序设计之面向对象程序设计基础(下)_第2页
java程序设计之面向对象程序设计基础(下)_第3页
java程序设计之面向对象程序设计基础(下)_第4页
java程序设计之面向对象程序设计基础(下)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计基础 下 继承 extends 继承是一种由已有的类创建新类的机制 是面向对象程序设计的基石之一 利用继承 程序员可以先创建一个定义共有属性和方法的一般类 再从一般类创建具有特性的新类 子类继承父类的非私有属性和方法 再定义不同于父类的那些属性和方法 增加父类中没有的属性和方法 从新定义父类的属性和方法 变量的隐藏和方法的置换 Java要求每个类都有父类 隐含为java lang包中的Object类 继承 继承实际上是存在于面向对象程序的两个类之间的一种关系 一个父类可以同时拥有多个子类 这时这个父类实际上是所有子类的公共域和公共方法的集合 而每一个子类则是父类的特殊化 是对公共域和方法在功能 内涵方面的扩展和延伸 this与superthis是当前对象的一个引用super是当前对象的直接父类对象的一个引用 类继承树 Object 类 Abstractclass class finalclass class java 单重继承 类继承图 f e51 e51 域的继承与扩充 域的继承与隐藏 classD200 CardextendsNumber PhoneCard doubleadditoryFee doublebalance booleanperformDial if balance 0 5 additoryFee balance 0 5 additoryFee returntrue elsereturnfalse 定义自己的域隐藏了父类域 域的继承与隐藏 子类定义的域隐藏了继承下来的同名父类域 调用从父类继承的方法操作的是从父类继承的域 在子类中可以指定使用父类属性 D200 Cardmy200 newD200 Card my200 balance 20 0 System out println 父类被隐藏的金额为 my200 getBalance 0 0if my200 performDial System out println 子类的剩余金额为 my200 balance 19 5 域的继承与隐藏 classD200 CardextendsNumber PhoneCard doubleadditoryFee doublebalance booleanperformDial doublegetSuperBalance returnsuper balance 访问继承域 System out println 父类被隐藏的金额为 my200 getSuperBalance 0 0 方法的继承与覆盖 子类可以定义与父类完全相同的方法 实现对父类方法的覆盖 完全相同的方法名完全相同的参数列表 完全相同类型的返回值否则就不是方法的覆盖 而是子类自己定义与父类无关的方法 父类的方法未被覆盖 因而仍然存在 方法的覆盖与域的隐藏的不同之处在于 子类隐藏父类的域只是使之不可见 父类的同名域在子类对象中仍然占有自己的独立的内存空间 而子类方法对父类同名方的覆盖将清除父类方法占用的内存 从而使父类方法在子类对象中不复存在 方法的继承与覆盖 classD200 CardextendsNumber PhoneCard doubleadditoryFee doublebalance booleanperformDial if balance 0 5 additoryFee balance 0 5 additoryFee returntrue elsereturnfalse doublegetBalance returnbalance 访问自己的域 方法的继承与覆盖 PhoneCard类 abstractbooleanperformDial doublegetBalance Number PhoneCard类 abstractbooleanperformDial doublegetBalance booleanperformConnection longcn intpw D200 Card类 booleanperformDial 覆盖实现抽象方法doublegetBalance 覆盖返回子类域值booleanperformConnection longcn intpw 多态 多态是指一个程序中同名的不同方法共存的情况面向对象程序中多态的情况有 通过子类对父类方法的覆盖实现多态 利用重载在同一个类中定义多个同名的不同方法 利用 重名 现象提高程序的抽象度和简洁性 多态实现 方法的覆盖 PhoneCard类有一个各子类共有的方法 abstractbooleanperformDial 这个方法代表的相同功能 拨打电话 但在不同种类的电话卡中 其具体实现是不同的 不同的子类可以重新定义该方法 但是所有的类中 凡是实现拨打电话这种功能的方法 尽管内容不同 却共享相同的名字 performDial在覆盖多态中 由于同名的不同方法是属于不同的类 所以只需在调用方法时指明是哪个类的方法即可区分题目 类名 方法名 多态实现 方法的重载 是同一类中定义同名方法的情况 这些方法同名的原因 是因为它们的最终功能和目的都相同 但由于在完成同一功能时 可能遇到不同的具体情况 所以需要定义含不同的具体内容的方法 同名不同方法是靠不同形式的参数列表 包括形式参数的个数 类型 顺序的不同 来区分 例 200卡拨打电话my200 performDial 12345678 1234 my200 performDial f e55 e55 多态实现 方法的重载 Integer类 StringtoString staticStringtoString inti staticStringtoString inti intradix Double类 StringtoString staticStringtoString doubled 覆盖了Object类的toString 方法System out println f f1 构造函数的重载 构造函数的重载是指同一个类中存在着若干个具有不同参数列表的构造函数 D200 Card 没有形式参数的构造函数 D200 Card longcn 有一个参数的构造函数 cardNumber cn 初始化电话卡号 D200 Card longcn intpw 有两个参数的构造函数 cardNumber cn 初始化电话卡号和密码password pw 构造函数的重载 D200 Card longcn intpw doubleb 三个参数的构造函数cardNumber cn 初始化卡号 密码和金额password pw balance b D200 Card longcn intpw doubleb Stringc 四个参数的构造函数cardNumber cn 初始化卡号 密码password pw 金额和接入号码balance b connectNumber c 调用不同的构造函数 D200 Cardmy200 newD200 Card D200 Cardmy200 newD200 Card 12345678 1234 D200 Cardmy200 newD200 Card 12345678 1234 50 0 构造函数之间调用 D200 Card longcn cardNumber cn D200 Card longcn intpw this cn password pw D200 Card longcn intpw doubleb this cn pw balance b D200 Card longcn intpw doubleb Stringc this cn pw b connectNumber c 构造函数的继承 子类无构造函数 无条件继承父类的无参数构造函数 子类有构造函数 在创建新对象时 先执行父类无参数构造函数 再执行自己的构造函数 若父类有带参数的构造函数 子类可在自己的构造函数中使用super关键字来调用它 而不再执行父类的无参数构造函数 super 调用语句必须是子类构造函数中的第一个可执行语句 f f2 test 接口 接口中的属性都是常量 接口中的方法都是没有方法体的抽象方法 接口定义的仅仅是实现某一特定功能的一组功能的对外接口和规范 而并没有真正地实现这个功能 接口的功能实现是在 继承 了这个接口的各个类中完成的 由这些类来具体定义接口中各抽象方法的方法体 通常把对接口的 继承 称为 实现 接口的实现 Object 类 Abstractclass class finalclass 接口 class java 单重继承 继承 实现 接口的作用 java程序中的类层次结构是树状结构 这种树状结构在处理某些复杂问题时会显得力不从心 随着类结构树的生长 越是处在下层的子类 它的间接父类越多 所继承的方法也会越来越多 造成子类成员的膨胀 庞杂 难以管理和掌握 接口在保持单继承的前提下 使Java程序的类层次结构更加合理 更符合实际情况 编程者可以把用于完成特定功能的若干属性和方法组织成相对独立的集合体 接口 凡是需要实现这种特定功能的类 都可以实现这个接口 接口的定义 public interface接口名 extends父接口名列表 常量域声明publicstaticfinal域类型域名 常量值 抽象方法声明publicabstract返回值类型方法名 参数列表 接口是由常量和抽象方法组成的特殊类 一个类只能有一个父类 但是它可以同时实现若干个接口 如果把接口理解成特殊的类 那么这个类利用接口实际上就获得了多个父类 即实现了多重继承 系统定义的接口 publicinterfaceActionListenerextendsEventListener publicabstractvoidactionPerformed ActionEvente 该接口代表了监听并处理动作事件的功能 它包含了一个抽象方法actionPerformed所有希望能够处理动作事件 如单击按钮 在文本框中回车等 的类都必须具有ActionListener接口定义的功能 也就是要实现这个接口 接口的实现 importjava applet importjava awt importjava awt event publicclasse57extendsAppletimplementsActionListener TextFieldpassword newTextField 我是密码 Buttonbtn newButton 隐藏 publicvoidinit add password add btn btn addActionListener this publicvoidactionPerformed ActionEvente password setEchoChar password selectAll f e57 接口的实现 类定义中使用implements指定实现某一接口类中必须具体实现该interface中定义的抽象方法 实现的方法必须指定为public限定符 即使不需要实现某方法 也要定义成一个空方法体的方法 Public方法名 内层类 innerclass 在某个类的内部定义的类称之内层类 内层类的定义方法定义命名的内层类 可以在类中 甚至方法中 定义内层类 并可在外层类中使用多次 创建多个对象 定义匿名内层类 一次性类 可以在new关键字后定义内层类 以立即创建一个对象内层类的类文件命名方法设外层类名为Myclass Myclass c1 class c1为命名内层类名 Myclass 1 class 表示类中定义的第一个匿名内层类 类中的内层类 外层类如同使用其他类一样使用内层类内层类拥有对在外层类中定义的所有属性和方法的访问权 其他类使用一个类的内层类时 要使用类前缀 Parcel2q newParcel2 Parcel2 Contentsc q cont f f3 Parcel2 类中的内层类 一般类只能是public和非public 而内层类可以指定为private和protected 如果内层类为private 只有外层类可以使用它 如果内层类为protected 只有外层类 与外层类处于同一包中的类 以及外层类的子类可以访问它 内层类可以实现接口及抽象类中的抽象方法 外层类可以将上述实现细节 乃至内层类都隐藏起来 给外界提供一个指向基类及接口的处理句柄 upcast f f3 Parcel3 方法中的内层类 内层类还可以定义在一个方法里 其作用域仅限于该方法的范围内 进一步隐藏 在其它方法里定义也没有名字冲突问题 实现一个接口 但只返回一个句柄在一编写好的代码中加一个类 但又不想公开化 f f3 Parcel4 条件分支中的内层类 在条件分支中的内部类并不表示有条件的建立 同其他类一样 在编译时就一道解决了 内部类只是限定它的作用域 在条件分支中使用 if e 类定义 f f3 Parcel5 实现接口的无名内层类 returnnewContents 调用隐含构造函数privateinti 11 publicintvalue returni 分号表示表达式的结束该语句将返回值同表示返回值类型的类定义结合在一起 它相当于 classMyContentsimplementsContents privateinti 11 publicintvalue returni returnnewMyContents f f3 Parcel6 继承基类的无名内层类 无名类没

温馨提示

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

评论

0/150

提交评论