




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java 初级,第五章 面向对象(中),主要内容,面向对象的特征 封装 继承 类的多态,面向对象的特征,面向对象的特征,用面向对象语言例如Java所编的程序就一定是面向 对象程序吗? 回答是否定的,关键看是否用了面向对象的基本特 征。面向对象特征主要有:封装、继承与多态。,封 装,封装的定义,概念: 利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保存在抽象数据类型内部,系统的其他部分只有通过对象被授权的操作,才能访问这个数据。 意义 自定义数据类型更完善 类内部实现细节的变化不会影响外部使用 类/对象中的内部数据更安全 符合“高内聚、低耦合”的软件设计要求,一个例子,class FighterPlane private String name; private int missileNum; public void setName(String _name) if(_name != null) name = _name.trim(); public void setNum(int _missileNum) if(_missileNum 0 ) missileNum = _missileNum; ,public void fire() if (missileNum0) System.out.println(“now fire a missile!”); else System.out.println(“No missile left!”); / end class,访问控制,体现封装,则需要掌握访问控制public, protected, private, “缺省”的用法。在java中这些修饰符可以修饰的种类有3种: 修饰类 修饰类的属性成员(域) 修饰类的成员方法,权限依次增大,访问控制注意,两个类同写在一个文件中,只能有一个类为public; 对象之间方法调用,访问修饰符为protected,应用范围为“B” ; 产生对象时,类的构造方法前修饰符为private,则只能在类的内部产生对象,从而引出“单件模式” ; 子类继承,当访问修饰符为protected时,应用范围为“BC” 。,访问控制举例1,package com.resource; public class FighterPlane public String name; public int missileNum; public void fire() if (missileNum0) System.out.println (“now fire a missile !“); missileNum -= 1; else System.out.println (“No missile left !“); ,package com.run; import com.resource.*; public class RunPlane public static void main(String args) FighterPlane fp=new FighterPlane(); = “苏35“; fp.missileNum = 6; fp.fire(); ,访问控制举例2,package com.resource; public class FighterPlane public static String name =“苏35“; ,package com.run; import com.resource.*; public class RunPlane public static void main(String args) System.out.println(FighterP); ,访问控制举例3(单件模式),package com.resource; public class FighterPlane private String name; private int missileNum; private static FighterPlane fp; private FighterPlane(String _n,int _mn) name = _n; missileNum = _mn; public static FighterPlane getInstance(String _n,int _mn) if (fp=null) fp = new FighterPlane(_n,_mn); return fp; public void fire() if (missileNum0) System.out.println(“now fire a missile!“); missileNum -= 1; else System.out.println(“No missile left!“); ,package com.run; import com.resource.*; public class RunPlane public static void main(String args) FighterPlane fp; fp= FighterPlane.getInstance(“苏35“,6); fp.fire(); ,访问控制举例4(演示),package com.resource; public class FighterPlane protected String name; protected int missileNum; public void fire() if (missileNum0) System.out.println(“fire a missile!“); missileNum -= 1; else System.out.println(“No missile left !“); /end class,package com.run; import com.resource.*; public class RunPlane extends FighterPlane private void init() name = “su35“; missileNum=5; public static void main(String args) FighterPlane fp = new FighterPlane(); = “苏35”;/error! fp.missileNum = 6;/error! fp.fire(); /end class,访问控制举例5,class Test private int value ; public static void main(String args) Test t = new Test(); System.out.println(t.value); ,消息,消息的实质就是引用向对象发出的服务请求,是对数据成员 和成员方法的调用,例如 和 fp.fire()就是发送消息,消息(Cont),能否发送消息取决于: 引用必须引用了特定的对象,否则会在运行时抛出NullPointerException异常。(举个例子) 对象必须定义了相应的属性或方法,否则编译不会通过 被访问的属性或方法必须具有可访问的权限,也就是说和封装的内容相互关联,消息(Cont),当fp作为A对象的属性时,A对象就可以向FighterPlane发送消 息,控制FighterPlane产生相应的操作。同时,当FighterPlane 中也有A对象的引用时,它也可向A对象发送消息,控制A产生 相应的操作,它们之间就存在关联关系了,消息(代码示例),class FighterPlane String name; int missileNum; public FighterPlane(String _name,int _missileNum) name = _name; missileNum = _missileNum; public void fire() if (missileNum0) System.out.println(“fire a missile !“); missileNum -= 1; else System.out.println(“No missile left!“); ,class A FighterPlane fp; public A(FighterPlane fpp) this.fp = fpp; public void invoke() /发送消息给FighterPlane的对象 System.out.println(); public class Run public static void main(String args) FighterPlane ftp = new FighterPlane(“su35“,10); /产生A对象,并将ftp对象引用作为参数传入 A a = new A(ftp); /发送消息,产生调用关系 a.invoke(); ,继 承,继承,通过extends关键字实现; 子类可以从父类继承所有非private的属性和方法作为自己的成员;,继承举例,class Plane protected String name; public void setName(String _name) name = _name; public String getName(String _name) return name; ,class FighterPlane extends Plane private int missileNum; public void setNum(int _missileNum) missileNum = _missileNum; public void fire() missileNum -= 1; ,Plane protected String name; public void setName(String _name) public String getName(),FightPlane private int missileNum; public void setNum(int _missileNum) public void fire(),FightPlane protected String name; private int missileNum; public void setName(String _name) public String getName() public void setNum(int _missileNum) public void fire(),继承效果如下:,当name前的修饰符为public时:,Plane public String name; public void setName(String _name) public String getName(),FightPlane private int missileNum; public void setNum(int _missileNum) public void fire(),FightPlane public String name; private int missileNum; public void setName(String _name) public String getName() public void setNum(int _missileNum) public void fire(),继承效果如下:,当name前的修饰符为private时:,Plane private String name;,FightPlane private int missileNum; public void setNum(int _missileNum) public void fire(),FightPlane private int missileNum; public void setNum(int _missileNum) public void fire(),继承效果如下:,当name前的修饰符为private时:,Plane private String name; public void setName(int _name) public String getName(),FightPlane private int missileNum; public void setNum(int _missileNum) public void fire(),FightPlane private String name; private int missileNum; public void setName(String _name) public String getName() public void setNum(int _missileNum) public void fire(),继承效果如下:,注意: 子类在继承父类的时候,首先应该满足父类可被访问,因为子类有可能和父类不在同一个包内 凡是修饰符为public或是protected的父类属性成员或是方法能够被子类所访问;private的属性成员或是方法不能被子类访问 private属性成员其所以能被子类访问,关键在于子类获得了父类setName 和 getName的访问权,但是子类在其内部无法直接访问父类私有变量name,Object类是所有类的共同祖先,即使定义类时没有写extents Object 在Object当中定义了许多方法,这些方法都可以被所有子类所继承,Object类,FrameWork半成品软件 继承java.applet包中的Applet类编写Applet程序 继承javax.servlet.http包中的HttpServlet类编写servlet程序,在框架编程中的应用,继承的作用:代码复用 最终类:final修饰的类,不能被继承,继承强调两点,多 态,多态的定义,多态的概念:多态是指一个程序中同名的不同方法共存的情况 Java中提供两种多态的机制:重载(overloading)与覆盖(overriding),类Parent中有两个getScore方法,它们的参数有所不同,class Parent public int getScore() return 3; public int getScore(int i) return i; ,重载例1,重载例2,public AudioClip getAudioClip(URL url) 。; public AudioClip getAudioClip(URL url, String name) try /通过重新构造一个新的URL对象,之后调用上面的同名方法来实现功能。 return getAudioClip(new URL(url, name); catch (MalformedURLException e) return null; ,如:class Applet,重载例3,public boolean addAll(Collection c) return addAll(size, c); /size是链表长度,此方法调用下面的方法,将传入对象插入到指定链表尾部 /index是链表的当前索引号 public boolean addAll(int index, Collection c) ,再如:java.util.Class LinkedList,子类对父类的同名方法(方法名称相同,参数相同,返回 类型相同)重新进行定义,即在子类中定义与父类中已定 义的相同名而内容不同的方法。 方法名称相同,参数名称相同,返回类型相同:覆盖 方法名称相同,参数名称不同:重载 方法名称相同,参数名称相同,返回类型不同:编译不能通过,覆盖,class Parent public int getScore() return 3; public String getCountryName() return “China”; ,覆盖例1,clas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外贸英语听说试题与听力材料解析
- 乡村医防协同应急响应机制构建
- 合同管理流程及档案表
- 商业合作伙伴框架合作协议
- 2025年人工智能应用考研试卷及答案
- 2025年金融市场与衍生品交易的基础能力考试题及答案
- 2025年旅游管理专业基础知识试卷及答案
- 2025年网络营销与电商运营考试试卷及答案
- 2025年钢铁冶金与材料科学的综合能力考试卷及答案
- 2025年甘肃省平凉华亭市策底镇招聘专业化管理的村文书笔试备考试题附答案详解
- 2023年遗传学考试题库(含答案)
- 2025年广东省广州白云区太和镇政府雇员招聘16人高频重点提升(共500题)附带答案详解
- 高三化学一轮复习课件:化学反应速率
- 家庭信仰的传承研究报告
- 《个人所得税的核算》课件
- 探究课程教学与非遗文化融合发展新路径
- 小学生心理健康教育-2024年秋形成性作业1-国开(AH)-参考资料
- 美容院会员卡转让协议书
- 废旧保温棉处置合同范例
- 【MOOC】思辨式英文写作-南开大学 中国大学慕课MOOC答案
- 《公路工程预算定额》(JTGT3832-2018)
评论
0/150
提交评论