Java面向对象程序设计与系统开发第2章-面向对象开发特点课件.ppt
-
资源ID:82473853
资源大小:2.68MB
全文页数:40页
- 资源格式: PPT
下载积分:9金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
Java面向对象程序设计与系统开发第2章-面向对象开发特点课件.ppt
面向对象程序设计面向对象程序设计与系统开发与系统开发第第2章章 面向对象开发特点面向对象开发特点 2驱动驱动任任务务一一 将上一章中的矩形类进行改造,为了对象中数据的安全性,其长、宽两个属性在本类创建的对象外不可访问;同时要求当矩形对象产生的时候就已经有具体的长度和宽度,而不是在生成对象后再给长宽赋值。其保留了计算本身周长和面积的功能 3目标及知识点目标及知识点类中类中setter和和getter方法方法 2构造方法构造方法 this、static关关键字字 3类及其成员的访问控制修饰符类及其成员的访问控制修饰符 4类的封装类的封装 1 14类的封装性类的封装性 封装(封装(Encapsulation)就是把对象的属性和行为结合成一)就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。个独立的单位,并尽可能隐蔽对象的内部细节。6在包中创建类在包中创建类 package 包名包名1.包名包名2.包名包名3.;7使用包使用包使用使用import语句句:import 包名包名1.类名或接口名;名或接口名;import 包名包名1.包名包名2.*;直接使用包直接使用包:java.util.ArrayList list=new java.util.ArrayList();8 类的访问权限类的访问权限 一个一个类仅有两个可能的有两个可能的访问权限:默限:默认的和公有的和公有(public)的。当一个)的。当一个类被声明被声明为public时,该类可被任何包的代可被任何包的代码访问;如果一个;如果一个类为默默认的的访问权限,那么限,那么仅能由同一包内的其他代能由同一包内的其他代码所所访问。10举例说明举例说明v/源文件Rectangle.javavpackage com.bean;/本类属于com包的bean子包下vpublic class Rectangle /该类的权限为publicv/私有的成员变量v private double length;v private double width;v/求长方形的面积,注意该方法权限v double area()v return length*width;v v /*打印输出,公共的成员方法*/v public void display()v /调用当前对象的成员变量vSystem.out.println(长:+length+t宽:+width);v /调用当前对象的成员方法vSystem.out.println(长方形的面积是:+area();v v11举例说明举例说明v/源文件RectangleDemo.javavpackage com.demo;/该类属于该类属于com.demo包下包下vimport com.bean.*;/导入导入com.bean包中所有的类包中所有的类vpublic class RectangleDemovpublic static void main(String args)v/调用带参构造方法创建一个长方形对象rectvRectangle rect=new Rectangle();v/rect.width=2;/private不允许类外部调用v/rect.length=4;/private不允许类外部调用v/System.out.println(长方形的面积是:+rect.area();/默认权限不同包的类不能调用v rect.display();/调用对象rect的成员方法vv13类的构造方法类的构造方法 构造方法的一般形式如下:修修饰符符 方法名方法名(形式参数列表形式参数列表)/方法体方法体1、构造方法名与类名相同。、构造方法名与类名相同。2、构造方法不返回任何值,也没有返回类型。、构造方法不返回任何值,也没有返回类型。3、每一个类可以有零个或多个构造方法,如果没有写构造方、每一个类可以有零个或多个构造方法,如果没有写构造方法默认存在一个没有参数的构造方法。法默认存在一个没有参数的构造方法。4、构造方法在创建一个类的对象时由系统自动地调用执行,、构造方法在创建一个类的对象时由系统自动地调用执行,一般不能显式地直接调用。一般不能显式地直接调用。15vpublic class RectangleDemovpublic static void main(String args)v/调用构造方法初始化每个长方形对象调用构造方法初始化每个长方形对象vRectangle rect1=new Rectangle(10,20);v Rectangle rect2=new Rectangle(3,6);vdouble area;v v area=rect1.area();/调用area()方法得到第一个长方形的面积v System.out.println(第一个长方形的面积是:+area);varea=rect2.area();/调用area()方法得到第二个长方形的面积v System.out.println(第二个长方形的面积是:+area);vv16 this关键字关键字 在程序中,可以在任何方法内使用在程序中,可以在任何方法内使用this来引用当前的对象,来引用当前的对象,this就指向了本身这个对象就指向了本身这个对象 /带参构造方法,用于初始化参构造方法,用于初始化长方形的方形的长和和宽 Rectangle(double w,double l)this.width=w;this.length=l;/带参构造方法,用于初始化参构造方法,用于初始化长方形的方形的长和和宽 Rectangle(double width,double length)this.width=width;/使用使用this来来访问同名同名实例例变量量 this.length=length;18。vclass Rectanglev double length;/长v double width;/宽v/带参构造方法,用于初始化长方形的长和宽带参构造方法,用于初始化长方形的长和宽v Rectangle(double width,double length)v this.width=width;/this关键字表示当前对象关键字表示当前对象v this.length=length;v v/求长方形的面积v double area()v return this.length*this.width;v v /打印输出v void display()v /调用当前对象的成员变量vSystem.out.println(长:+this.length+t宽:+this.width);v /调用当前对象的成员方法vSystem.out.println(长方形的面积是:+this.area();v v【例例2-3】在例在例2-2的基础上修改的基础上修改Rectangle类的构造方法,类的构造方法,使其形式参数与成员变量名称相同使其形式参数与成员变量名称相同19static静态成员静态成员-静态类成员静态类成员 被声明为被声明为static的成员变量是静态变量,也称为类变量。的成员变量是静态变量,也称为类变量。静态变量本质上是全局变量。当声明该类的对象时,不静态变量本质上是全局变量。当声明该类的对象时,不生成生成static变量的副本,类的所有实例共享同一个变量的副本,类的所有实例共享同一个static变量变量 被声明为被声明为static的成员方法是静态方法,也称为类方法。的成员方法是静态方法,也称为类方法。静态方法有几条限制:静态方法有几条限制:(1)它们仅可以调用其他)它们仅可以调用其他static方法。方法。(2)它们只能访问)它们只能访问static数据成员。数据成员。(3)它们不能以任何方式引用)它们不能以任何方式引用this或或super20static静态成员静态成员-静态代码块静态代码块static/程序程序块 静态代码块不是类的方法,没有方法名、返回值和参数表。静态代码块不是类的方法,没有方法名、返回值和参数表。静态代码块也与类方法一样,不能使用实例变量及方法,静态代码块也与类方法一样,不能使用实例变量及方法,也不能使用也不能使用this或或super关键字。关键字。static块(即静(即静态代代码块),),这个个块仅在在该类被被第一次加第一次加载时执行一次行一次。静。静态代代码块的的语法格式:法格式:21vpublic class UseStaticv static int a=3;/静态变量(类变量),并初始化静态变量(类变量),并初始化v static int b;/静态变量静态变量v int c=10;/实例变量实例变量v static void display(int x)/静态方法(类方法)静态方法(类方法)v System.out.println(x=+x);v System.out.println(a=+a);v System.out.println(b=+b);v/System.out.println(c=+c);/静态方法不能直接调用非静态成员v v static /静态代码块静态代码块v System.out.println(静态代码块执行开始静态代码块执行开始);v b=a*4;/初始化静态变量初始化静态变量bv v public static void main(String args)v display(42);/直接调用静态方法直接调用静态方法v v【例2-4】下面示例显示的类有方法、几个static变量和一个static初始块:22任务实现任务实现123分析抽象出类分析抽象出类按照类图编制出类框架按照类图编制出类框架实现出类中的方法实现出类中的方法 45定义主类定义主类创建类的对象创建类的对象24目标及知识点目标及知识点成员变量的隐藏成员变量的隐藏 2成员方法的重写成员方法的重写 3super关关键字字 4类的继承类的继承1 125类的继承性类的继承性 继承(继承(Inheritance)是一种联结类与类的层次模型。)是一种联结类与类的层次模型。继承性是指子类拥有父类的属性和行为。继承意味着继承性是指子类拥有父类的属性和行为。继承意味着“自动自动地拥有地拥有”,即子类中不必重新定义已在父类中定义过的属性,即子类中不必重新定义已在父类中定义过的属性和行为,而它却自动地、隐含地拥有其父类的属性与行为。和行为,而它却自动地、隐含地拥有其父类的属性与行为。26类继承的实现类继承的实现 Java中的继承是通过中的继承是通过extends关键字来实现的,关键字来实现的,在定义新类时使用在定义新类时使用extends关键字指明新类的父关键字指明新类的父类,就在两个类之间建立了继承关系。类,就在两个类之间建立了继承关系。28类继承的实现类继承的实现-类继承的传递性类继承的传递性 类继承具有类继承具有传递性传递性,即子类继承父类的所有,即子类继承父类的所有非私有成员非私有成员,也继承父类的父类直至祖先所有的非私有成员。继承是也继承父类的父类直至祖先所有的非私有成员。继承是传递的,这正体现了大自然中特殊与一般的关系。传递的,这正体现了大自然中特殊与一般的关系。【例例2-5】v设计一个长方体类Cube,它继承自例矩形类Rectangle,它除了有矩形类的长、宽属性和计算面积的方法外还有表示长方体高的成员变量height、以及计算长方体体积的方法volume()。/矩形矩形类class Rectangle double length;/长double width;/宽double area()/求求长方形的面方形的面积return length*width;void setDim(double w,double l)/设置置长方形的方形的长和和宽width=w;length=l;/长方体方体类,继承于承于Rectangle类class Cube extends Rectangle double height;/高高public Cube(double width,double length,double height)/构造方法构造方法this.width=width;this.length=length;this.height=height;double volume()/求求长方体的体方体的体积return area()*height;/主主类(拥有有main方法的方法的类)public class Test public static void main(String args)Cube c=new Cube(1,2,3);System.out.println(长:+c.length+t宽:+c.width+t高高:+c.height);System.out.println(长方体的体方体的体积:+c.volume();31任务实现任务实现123分析抽象出类分析抽象出类按照类图编制出类框架按照类图编制出类框架实现类中的方法实现类中的方法45定义主类定义主类创建类的对象创建类的对象 访问对象访问对象32驱动驱动任任务务三三设计一个人类,有姓名、年龄两个属性,一个无参构造方法(用于将属性初始化为其默认值),一个带参构造方法,会说话、会工作等行为。然后设计学生类和教师类,它们都是派生自人类的子类,其中学生类还包含有学号属性,有自己的说话和工作方式;教师类还包含有教师号属性,也有自己的说话和工作方式。建立若干个学生对象和教师对象,分别输出各对象的信息。33目标及知识点目标及知识点方法的重载与重写方法的重载与重写 2类的多态特性类的多态特性 1 134重载重载 在在Java中,同一个类中如果同时存在两个以上的方法有中,同一个类中如果同时存在两个以上的方法有同一个名字,在这种情况下,我们说方法被重载了,这个同一个名字,在这种情况下,我们说方法被重载了,这个过程被称为方法重载。过程被称为方法重载。35【例例2-10】v使用类的重载构造方法生成不同的长方形对象,计算各长方形的面积。class Rectangle double length;/长 double width;/宽/定义三个重载的构造方法定义三个重载的构造方法 public Rectangle()/无参构造方法无参构造方法 length=1.0;width=1.0;public Rectangle(double length)/带参构造方法参构造方法 this.length=length;this.width=length;public Rectangle(double length,double width)/带参构造方法参构造方法 this.length=length;this.width=width;public double area()/求求长方形的面方形的面积 return length*width;public void display()System.out.println(长方形的面方形的面积是是:+this.area();public class RectangleDemopublic static void main(String args)Rectangle rect1=new Rectangle();/调用无参构造方法用无参构造方法 rect1.display();Rectangle rect2=new Rectangle(6);rect2.display();Rectangle rect3=new Rectangle(10,20);rect3.display();长方形的面积是:长方形的面积是:1.0长方形的面积是:长方形的面积是:36.0长方形的面积是:长方形的面积是:200.036重写重写 当同名方法同时存在于子类和父类中时,对于子类来说就当同名方法同时存在于子类和父类中时,对于子类来说就是将继承的父类的方法重新写过了,实现方式完全和父类是将继承的父类的方法重新写过了,实现方式完全和父类无关。当调用子类的方法时,运行的是子类重新改写的方无关。当调用子类的方法时,运行的是子类重新改写的方法,而不是父类的方法。法,而不是父类的方法。37【例例2-11】重写方法的调用。重写方法的调用。class A void display()System.out.println(这是父是父类的方法的方法);void print()System.out.println(As method print()called!);class B extends A /子子类B派生自父派生自父类Avoid display()/方法的重写方法的重写System.out.println(这是子是子类的方法的方法);public class Test public static void main(String args)A a1=new A();/a1引用引用类A的的实例例 a1.display();a1.print();A a2=new B();/a2引用引用类B的的实例,子例,子类对象可以看做父象可以看做父类对象象 a2.display();a2.print();结果:结果:这是父类的方法这是父类的方法As method print()called!这是子类的方法这是子类的方法As method print()called!38方法重写时要遵循三个原则:方法重写时要遵循三个原则:v重写方法的返回类型必须与它所重写的方法相同。v重写方法不能比它所重写的方法有更严格的访问权限,也就是子类private方法不能覆盖掉父类public的方法。v重写方法不能比它所重写的方法抛出更多的异常。39任务实现任务实现123分析抽象出类分析抽象出类按照类图编制出类框架按照类图编制出类框架实现类中的方法实现类中的方法45定义主类定义主类创建类的对象创建类的对象 访问对象访问对象40课堂总结课堂总结 v类的封装v类的继承v多态