《Java基础第3讲面向对象程序设计(课时2).ppt》由会员分享,可在线阅读,更多相关《Java基础第3讲面向对象程序设计(课时2).ppt(40页珍藏版)》请在三一办公上搜索。
1、第三讲 面向对象程序设计,-主讲:邓永生,Java 程序设计,主要内容,二、面向对象概念:类与对象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,一、从日常生活中看对象类和对象,类在面向对象的程序设计中,类是程序的基本单元。类实例化就成为对象。类的实例化指的是创建该类的对象.类的作用就象一个模板,所有对象(实例)依照它来创建。继承多态,类,对象,抽象,实例化,封装的实体=数据+方法,行为,属性,方法,变量,一、从日常生活中看对象成员,类是的一种重要的复合数据类型。基本数据类型:整型,实型(浮点型),布尔型,字符
2、型 复合数据类型:类,接口下面看看数据抽象的一个例子小汽车类,class 小汽车 int 颜色;int 车门个数;int 极限速度;void 刹车();void 加速();void 减速();,一、从日常生活中看对象封装,封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,实际上是使用,对象A,对象B,方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。,数据,方法,方法,私有数据,公有数据,一、从日常生活中看对象继承,继承最主要的目的是为了“扩展”原类的功能、加强或改进原类所没有定义的属性和方法,狗+颜色+叫(),圣伯纳+雪地救人(),博美+叫()+玩球(),自行车,
3、(父类),山地车,赛车,双人车,子类,一、从日常生活中看对象多态,一个名词有多种语义,一个方法多种功能.参数表不同-方法的重载类派生过程中,重新改写父类的方法-覆盖,public double area(double r),public double area(double a,double b),public double area(double a,double b,double c),3.0,2.0,3.0,3.0,4.0,5.0,例如:声明三个同名方法area求圆、矩形、和三角形的面积,类,主要内容,二、面向对象概念:类与对象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则
4、,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,二、面向对象概念:类与对象,我们经常说:物以类聚,人以群分。它反映了人们对客观事物分类管理的思想,要想分门别类地管理好各种事物,必然存在着对客观事物的最基本的认识,对同一种事物要有明显的划分依据,也就是要描述清楚同一种事物共同的基本外观特征(属性)及共同的行为能力(方法)。这个过程可以通过观察、归纳、总结等方式得到对客观事物的共性描述,显然,这是一个把客观事物映象到人脑,1、类,二、面向对象概念:类与对象,对象就是类所描述的同种事物中实实在在的一个个体。在程序中,当一个对象产生之后就意味着它具有了生命特征,程序中的对象是类
5、的一个实例。,2、对象,中形成思想认识的抽象思维过程。所以类是对同一种事物(包括外观世界客观存在的、抽象的、有生命的、无生命的)所具有的共性描述,这里的共性包括事物本身的属性特征和基本行为特征。,类本身并没有生命特征,它仅仅是一个针对事物的共性描述,通常以文件的形式保存在各种存储介质上。,在程序中,类以特定的方式(new)被调入到内存中使用,此时存在于内存中的这段类代码就叫做对象,显然,对象与类的代码本质上是完全相同的,只是存储介质不同而已,而且对对象而言,它具有了生命特征(在内存中的生存周期)。更重要的是,在同一个程序中,类可以被多次调入内存形成多个相同的对象,对象之间用不同的对象变量命名得
6、以区分。,3、类与对象间的关系,二、面向对象概念:类与对象,主要内容,二、面向对象概念:类与对象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,三、类的定义,语法如下:修饰字 class 类名 extends 父类名 implements 接口列表 类体 1)、创建类的关键字是“class”2)、类以文件的形式保存在硬盘3)、类的名字必须和文件名相同4)、定义类的类型的关键字有3个:public、abstract、final5)、类的构造器的名字必须和类名相同6)、方法申明或定义,1、定义类,成员变量和成员方法
7、。,实例,实例,三、类的定义,1)、在一个类中与类同名的方法叫构造方法,系统在产生对象时会自动执行2)、构造方法通常用于定义一些初值或其他准备工作3)、一个类可以有多个构造函数(重载),根据参数的不同决定执行哪一个4)、如果程序中没有定义构造方法,则创造实例时使用的是缺省方法,它是一个无内容的空方法,2、构造方法:是提供对象初始化的专用方法,不能被显示地直接调用。,与类同名而不是与java文件同名。,实例,三、类的定义,声明成员方法的格式为:static()其中,修饰符和成员变量的修饰符一样,含义也相同。例如:public void SetDate(int y,int m,int d).,3、
8、声明或定义类的方法,定义在所有方法之外的变量是类的成员变量,定义在方法之内的变量是普通变量。,super指这个对象的父类super()用来调用父类中的方法及变量数据 public class apple extends fruits public apple(int price)super(price);以上句子表示使用超类的构造函数生成实例。super必须是子类构造器的第一条语句。,三、类的定义,4、super与this,1)、super,还可用super.调用父类中被隐藏的成员变量和方法。,实例,三、类的定义,2)、this,this 指对象自己this 的作用主要是在当前对象中引用自己。
9、如:要将对象自己当作参数,传送给别的对象中的方法。,class ThisClass public static void main()Bank bank=new Bank();bank.someMethod(this);,class Circle int r;Circle(int r)this.r=r;public area()return r*r*3;,实例,实例,this指向当前类的实例本身。静态方法不能使用this关键字,因为静态方法不属于当前类的实例,所以this也就没有什么东西去指向。构造器的this可以指向同一个类中不同参数列表的另外一个构造器。,主要内容,二、面向对象概念:类与对
10、象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,四、面向对象的基本特征,面向对象的三大基本特征是:继承、封装、多态。,1、继承(inherit),继承是通过extends让某个类型的对象获得另一个类型的对象的特性的方法。例如布谷鸟属于飞鸟类,也属于鸟类。可见,子类都具有父类的公共特性。,子类不能继承父类中访问权限为private的成员变量和方法;Java不支持多重继承,即一个类从多个超类派生的能力。,实例,继承机制使得新类不仅有自己特有的成员变量和方法,而且通常是拥有被继承类(超类)的全部成员变量和方法。,要
11、继承就得创建子类,创建子类语法:class extends.,四、面向对象的基本特征,2、封装(encapsulation),访问控制符是Java语言控制对方法和变量访问的修饰符。对象是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏;通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。private、default、protected、public,实例,实例,四、面向对象的基本特征,关于变量和方法的访问权限修饰字:public、protected、private1)、public:任何其它类、对象只要可以看到这个
12、类的话,那么它就可以存取变量的数据,或使用方法。2)、protected:在同一类,同一包可以使用。不同包的类要使用这种变量和方法,必须是该类的子类才可以存取变量或调用方法。3)、private:不允许任何其他类存取和调用。,四、面向对象的基本特征,4)、final,final 方法之前,允许继承防止覆盖此方法final 类之前,标是该类不能被继承final 变量之前,定义一个常量,静态变量(类变量),声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:它们仅能调
13、用其他的static 方法;它们只能访问static数据;它们不能以任何方式引用this 或super。,5)、static,注意:在一个static 方法中引用任何实例变量都是非法的。如果一个成员(属性或方法)被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。通常属于类的公共属性说明成static。,四、面向对象的基本特征,修饰符访问规则:public,private,protected,default。,四、面向对象的基本特征,3、多态(Polymorphism),在Java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法覆盖实
14、现的动态多态性(运行时多态)。1)、编译时多态:在编译阶段,编译器会根据参数的不同来静态确定调用相应的方法,即具体调用哪个被重载的方法。2)、运行时多态:由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。,实例,实例,实例,实例,子孙类中定义的方法和祖先类中某个方法同名、同参数,则祖先类中的该方法被覆盖(overriding)。,实例,实例,同一个类中多个方法用相同的名称,但参数不同时叫方法重载(overloading)。参数不同是指参数个数不同或参数个数相同时参数
15、的对应位置的数据类型不同。,消息就是一个对象向另一个对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和应答信息。服务通常被称为方法或函数。void 与 return,四、面向对象的基本特征,4、消息传递,实例,消息传递的四个要素:消息接收对象、接收对象中哪个方法完成指定动作、此方法需要的参数、此方法是否有返回消息。,主要内容,二、面向对象概念:类与对象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,五、抽象类、接口,实例,抽象类是在定义类时用 abstract 修饰的类,用abst
16、ract 修饰的方法叫抽象方法。一个类中如果有抽象方法,那它一定属于抽象类。抽象类不能够直接用new创建相应的对象,也就是它不能够被实例化,必须通过继承产生子类,再通过子类得到对象。在抽象类中如果有抽象方法,一定要在子类中实现抽象类中的抽象方法。,1、抽象类,实例,五、抽象类、接口,2、接口,Java语言只支持单继承机制,不支持多继承。接口和抽象类非常相似,都是只定义了类中的方法,没有给出方法的具体实现。Java语言不仅规定一个子类只能直接继承自一个父类,同时允许一个子类可以实现多个接口。所以,从本质上讲,Java语言是借助于接口来实现C+的多继承机制的。,五、抽象类、接口,1)、定义接口,接
17、口的定义格式:修饰符interface接口名.修饰符可以是public,也可以缺省。当为缺省时,接口只能被与它处在同一包中的方法访问;当声明为public时,接口能被任何类的方法访问。例如:public interface PrintMessage.,五、抽象类、接口,说明:,接口中定义的所有成员变量都必须设置初值若接口定义为默认型访问权限,则接口中的成员变量全部隐含为final static型。这意味着它们不能被实现接口方法的类改变,并且为默认访问权限当接口保存于文件时,其文件命名方法和保存类的文件命名方法类同一个文件可以包含若干个接口,但最多只能有一个接口定义为public,其他的接口必须
18、为默认类必须实现定义在接口中的所有方法,五、抽象类、接口,2)、接口与抽象类的区别,定义类时实现接口用关键字 implements,一个类只能继承一个父类,但可以实现若干个接口接口中的成员变量只能用public、static和final来定义,如果不声明,则默认为public static final。类定义的完整格式是:,class extends implements,.,实例,实例,主要内容,二、面向对象概念:类与对象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,六、面向对象设计原则,面向对象设计原则三
19、大基本原则:,1、针对接口编程,而不是针对实现编程 2、优先使用对象组合,而不是类继承 3、封装变化点,就一个类而言,应该仅有一个引起它变化的原因。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。测试驱动的开发实践常常会在设计出现臭味之前就迫使我们分离职责。,(1)、单一职责原则(),六、面向对象设计原则,软件实体(类、模块、函数/方法)应该是可扩展的,但不应该是可修改的。也就是说:对于扩展是开放的,对于更改是封闭的。,(2)、开闭原则(),子类应当可以替换父类并出现在父类能够出现的任何地方。,(3)、替换原则(),、高层模块不应该依赖于低层模块,二者都应该依赖于抽象。、抽象不应
20、该依赖于细节,而细节应该依赖于抽象。,(4)、依赖倒置原则(),在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。,六、面向对象设计原则,采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。,(5)、接口分离原则(),主要内容,二、面向对象概念:类与对象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,七、小结,1、类是Java面向对象编程的基本元素,它定义了一个对象的结构和功能 2、
21、构造方法3、类继承,this和super4、类变量(static类型)、方法和实例变量、方法5、方法覆盖和重载、抽象类与接口6、面向对象特性7、面向对象设计原则,七、小结,8、本讲还学习了如下关键字:,public、protected、private、extends、abstract、interface、implements、static、final、super、this、void、class、return。,主要内容,二、面向对象概念:类与对象,三、类的定义,四、面向对象的基本特征,六、面向对象设计原则,七、小结,八、课程实训,五、抽象类、接口,一、面向对象概念:类与对象,八、课程实训,实训内容:,1、随机生成30个1200之间的整数,并按由小到大的顺序分别打印出所有的奇数和偶数。2、完成第一题的功能,但要求排序的功能由另一个类来完成。,实训目标:,