Java-面向对象编程.ppt
《Java-面向对象编程.ppt》由会员分享,可在线阅读,更多相关《Java-面向对象编程.ppt(52页珍藏版)》请在三一办公上搜索。
1、Java程序设计,2,面向对象程序设计的特点,面向对象程序设计具有三大特征:封装继承多态,封装,封装:隐藏内部细节,控制外部访问的方式恰当的封装可防止程序员相互干扰,实现了模块化和信息隐藏通过控制对(内部)属性和方法的访问方式来实现封装不要依赖于你不需要知道的知识类和包是Java语言中的基本封装机制类实现了数据和方法的封装包是对一组相互耦合度较高的类型的封装,访问控制修饰符,JAVA中的访问控制修饰符 public,protected,package(缺省),private,关联和聚合,对象不是孤立的关联(Association)两个对象间存在某种语义联系方向性关联可以是单向的,也可以是双向的
2、单向关联:A“知道”B,但B不“知道”A双向关联:A“知道”B,B也“知道”A依赖性不完全依赖A“知道”B,因此A依赖于B这种依赖一般是松散的,即A和B的存在都不需要以对方的存在为基础实现时,一般通过保存对方的对象标识来表达,关联和聚合,关联(Association)的UML表示,关联和聚合,聚合(Aggregation)表示两个对象间有整体部分关系一种特殊的关联对象间的聚合关系总是单向的依赖性依赖较强B是A的一部分,如果A聚合B(has-A关系)将B从A中取出,则A往往变得不完整一般情况下,B可以独立于A而存在换句话说,在系统内部存在一个A和B同时都独立存在的暂时状态(当然此时聚合对象的功能
3、不完整)。实现时,一般通过在A中保存B的对象标识来表达,关联和聚合,聚合(Aggregation)的UML表示,aStudent,aSchedule,关联和聚合,复合(Composition)一种更强的聚合关系(特殊的聚合)对象间的复合关系总是单向的依赖性部分的生命周期依赖于整体B不能独立于A而存在B的生命周期受A的控制(B会随着A的创建而创建,随A的消亡而消亡)实现时,一般通过在A中保存完整的B对象来表达B对象的实例化在A中完成,关联和聚合,复合(Composition)的UML表示,aTree,aLeaf,关联和聚合,练习:以下各组对象之间应是哪种关联关系?学生课本教师学生书前言书作者汽车
4、引擎PCCPU深圳大学深圳大学软件学院顾客合同,继承概述,类与类之间还有一种Is-A关系,子类自动获得父类的方法与属性,我们称之为继承 子类拥有父类的一些公有的属性和方法,并且子类可能也会有自己的方法和属性 派生与抽象、特化与泛化除了添加父类中没有的新方法外子类还可以通过重写父类的方法来重定义自己的行为方式,继承基础,重写与重载不同,重载需要不同的参数来区别相同方法名的方法,重写是发生在子类与父类上,重写父类方法必须与父类的方法名同名同参并且同返回值。当访问修饰符为private时,表明该方法不能被重写,同样当方法具有final关键字时该方法不能被重写。子类虽然重写了父类的某个方法,但仍然需要
5、用到父类的这个方法,这时使用super关键字仍然可以调用父类的方法。,/TestOstrich.javapublic class TestOstrich public static void main(String args)Bird ostrich1=new Ostrich();/向上转型 ostrich1.fly();class Bird public static void fly()System.out.println(Bird Flying!);class Ostrich extends Birdpublic static void fly()System.out.println(I
6、 cant fly!);输出结果:Bird Flying!,Static方法不能重写,Bird类派生了鸵鸟Ostrich类,以上程序声明了一个Bird类型的鸵鸟对象,象基本类型数据的自动提升一样,鸵鸟自动提升为Bird类,这叫做向上转型。static方法是不会被重写如TestOstrich.java所示:子类中定义了与父类同名的fly方法,父类的fly方法不会被重写,而是被遮蔽因此得出结果鸵鸟会飞!,构造方法的调用顺序,子类在产生对象实例时首先会调用父类的构造方法,如果没有显示的指定调用父类自定义的构造方法,那么编译器会调用默认的父类构造方法:super()。但是父类如果自定义了带参数的构造方
7、法,就必须在子类的构造方法中指定调用它,否则会因找不到super()而报错。注意,如果需要显示的调用父类构造方法,必须将其写在构造方法里的第一行。接着按声明的顺序调用成员初始化。最后调用本构造方法的方法体,Object类,Java中所有的类都是继承自一个老祖宗,Object类,它们都是Object类的子类。如果一个类在声明时没有用extends关键字显式的指定继承自某个基类,则Java隐式的指定它的默认基类为Object类。这种强制的继承模式叫做单根继承模式。单根继承使得Java简化了许多操作,基于单根继承,所有的对象都可以像基本数据类型一样向上转型到根层次上而使其操作上一视同仁 单根继承的优
8、势还在于可以在Object类定义所有对象都通用的方法,所有类都会自动继承这些方法,toString方法,Object类定义了 public String toString()方法,返回值是String类型,每当个对象都会有个toString方法,作用就是描述对象的信息要想使用toString方法必须按自己的需求重写这个方法,对象的比较,Java中比较两个基本数据类型变量的值时很简单使用“=”操作符 Object类中的equals方法提供了对象内容的比较方法同样我们要是用这个方法必须重写它 如果不重写equals方法,将调用object类的equals方法。Object类的equals方法相当于
9、“=”,为什么要继承,“继承”概念的引入最早出现于Simula67语言需要继承,因为它支持更丰富、更强大的建模,有利于重用它可以在一个类中定义信息和行为,在相关子类中共享这些定义继承是很自然的使用继承,可以在已有类的基础上扩充,建立新类抽取一组类中的共同信息和行为,并同时保持类型安全进行抽象。对类进行约束,设计类层次结构,自顶向下根据需要逐步扩充自底向上寻找相同点和相异点逐级抽象继承的表示法:一条带有空心大箭头的有向实线,箭头指向父类标识继承关系的原则:LSP“Inheritance should ensure that any property proved about supertype
10、objects also holds for subtype objects.”Liskov,1987,多重继承,为什么引入多重继承?多重继承的优点功能强大允许私有继承更接近真实世界允许混合(mix-in)多重继承的缺点复杂,有时难以理解导致名字冲突(二义性)重复继承编译器和运行时实现困难,示例:摘自ARM(,The Annotated C+Reference Manual,Addison-Wesley,1990)class Lottery public:virtual int draw();.;class GraphicalObject public:virtual int draw();.
11、;class LotterySimulation:public Lottery,public GraphicalObject./没有声明draw;LotterySimulation*pls=new LotterySimulation;pls-draw();,/编译错误,class B.;class C.;class D:public B,public C.;,往往最后会发展成象下面这样:class A.;class B:virtual public A.;class C:virtual public A.;class D:public B,public C.;,问题是:设计类A和类B时,能否知
12、道它们会被同时继承?,多重继承,如何替代多重继承(Java、C#等语言中的)接口聚合面向方面编程(AOP)范型(类属),继承与聚合,继承与聚合都可用于扩展类的功能和进行重用继承通过扩展一个已有类的实现,从而获得新功能泛化类(超类)可以显式地捕获那些公共的属性和方法特殊类(子类)则通过附加属性和方法来进行实现的扩展聚合通过创建一个聚合了其它对象的对象,从而获得新功能通过将功能委托给所聚合的一个对象,从而实现新功能,继承与聚合,例子:class Stack extends ArrayList private int stack_pointer=0;public void push(Object a
13、rticle)add(stack_pointer+,article);public Object pop()return remove(-stack_pointer);public void push_many(Object articles)for(int i=0;i articles.length;+i)push(articles);,Stack a_stack=new Stack();a_stack.push(1);a_stack.push(2);a_stack.clear();,继承与聚合,继承优点容易进行新的实现,因为其大多数可继承而来易于修改或扩展那些被复用的实现聚合破坏了封装性,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 编程
链接地址:https://www.31ppt.com/p-6509183.html