面向对象程序设计1-zw.ppt_第1页
面向对象程序设计1-zw.ppt_第2页
面向对象程序设计1-zw.ppt_第3页
面向对象程序设计1-zw.ppt_第4页
面向对象程序设计1-zw.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计1,ID:SCSJ001-JavaBasicSyntax,2,2019/12/3,课程目标,信息的隐藏和封装this关键字访问控制对象的构造和初始化方法的重载(overload)静态域与静态方法(static),3,2019/12/3,信息的隐藏和封装,隐藏:指的是对象的一种保护机制,使得它的属性或方法不被外部的程序直接访问封装指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。,publicclassStudentpublicintage;publicclassStudentTestpublicstaticvoidmain(Stringargs)Students=newStudent();/合“法”但不合理的设置s.age=1000;,4,2019/12/3,为什么需要封装?,编写一个类,代表softeem学员,要求:具有属性:姓名、年龄具有行为:自我介绍softeem学员的最小年龄要求:18岁,publicclassSofteemStudentpublicStringname;/学员姓名publicintage;/年龄/*返回自我介绍的内容*/publicStringintroduction()return“大家好!我是”+name+“,我今年”+age+“岁!;,5,2019/12/3,编写一个测试类,要求:实例化一个学员对象,并对其初始化在控制台输出该学员的自我介绍,publicclassSofteemStudent1Testpublicstaticvoidmain(Stringargs)SofteemStudentsstu=newSofteemStudent();=“周博通;sstu.age=8;System.out.println(roduction();,要满足学员的最小年龄要求,可以通过对属性的封装来实现,6,2019/12/3,publicclassSofteemStudent2privateStringname;/学员姓名/返回学员姓名publicStringgetName()returnname;/设定学员姓名publicvoidsetName(Stringname)=name;,在java程序中,我们可以这样实现封装:将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性,SofteemStudent2sstu=newSofteemStudent2();sstu.setName(“周博通);StringsName=sstu.getName();,通过setter、getter方法访问name属性,this代表当前类的实例,方法的调用者本身,7,2019/12/3,publicclassSofteemStudent2privateStringname;/学员姓名/返回学员姓名publicStringgetName()returnname;/设定学员姓名publicvoidsetName(Stringname)=name;,在java程序中,我们可以这样实现封装:将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性,SofteemStudent2sstu=newSofteemStudent2();sstu.setName(“周博通);StringsName=sstu.getName();,通过setter、getter方法访问name属性,this代表当前类的实例,方法的调用者本身,8,2019/12/3,封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter)和取值(getter)的公共方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制,publicclassSofteemStudent2privateStringname;/学员姓名privateintage;/年龄publicintgetAge()returnage;publicvoidsetAge(intage)if(age18)System.out.println(错误!最小年龄应为18岁!);this.age=18;/如果不符合年龄要求,则赋予默认值elsethis.age=age;/此处省略对name属性的setter、getter方法,1,2,3,9,2019/12/3,publicclassSofteemStudent2Testpublicstaticvoidmain(Stringargs)SofteemStudent2sstu=newSofteemStudent2();sstu.setName(“周博通);sstu.setAge(8);System.out.println(roduction();,错误!最小年龄应为18岁!大家好!我是周博通,我今年18岁!,测试类通过调用setter方法,为对象的各个属性赋值,10,2019/12/3,封装的好处,2,防止对封装数据的未经授权的访问,3,有利于保证数据的完整性,5,有选择地向外界提供数据,4,便于修改,增强代码的可维护性,11,2019/12/3,this关键字,Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。构造器中指该构造器所创建的新对象方法中指调用该方法的对象this关键字的用法在类本身的方法或构造器中引用该类的实例变量和方法用来调用其他的重载的构造器,12,2019/12/3,ThisDemo,publicclassThisDemoprivateStringdemo;privateintage;publicStringgetDemo()returndemo;publicThisDemo()/*paramdemo*调用无参数的构造函数*调用类的成员变量*/publicThisDemo(Stringdemo)/ThisDemot=newThisDemo();this();this.age=18;publicvoidsimple()this.print();publicvoidprint()System.out.println(print(););/避免引起歧义publicvoidsetDemo(Stringdemo)this.demo=demo;,13,2019/12/3,访问控制,在Java中,可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。,14,2019/12/3,访问控制,访问控制的限制程度从高到低如下图所示。注意,default不是一个修饰符,它只是用来表示一种不加任何修饰符时的状态。,15,2019/12/3,完整的类定义语法,访问控制符修饰符class类名extends超类implements接口表/类体构造函数成员变量成员方法,16,2019/12/3,为什么需要构造方法?,开发softeem学员类SofteemStudent3,要求:具有属性:姓名、年龄、学号具有行为:自我介绍,publicclassSofteemStudent3privateStringname;/姓名privateintage;/年龄privateStringcode;/学号publicStringintroduction()return“大家好!我是”+name+“,我今年”+age+“岁,学号“+code;/以下是属性的setter、getter方法,此处省略,17,2019/12/3,编写一个测试类,要求:实例化一个学员对象,并对其初始化在控制台输出该学员的自我介绍,publicclassSofteemStudent3Testpublicstaticvoidmain(Stringargs)SofteemStudent3sstu=newSofteemStudent3();sstu.setName(“杨过);sstu.setAge(22);sstu.setCode(“007);System.out.println(roduction();,要简化对象初始化的代码,可以通过构造方法来解决,大家好!我是杨过,我今年22岁,学号007,SofteemStudent中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?,18,2019/12/3,构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值,publicclassSofteemStudent3privateStringname;/学员姓名/构造方法publicSofteemStudent3()name=无名氏;,publicclassSofteemStudent3Testpublicstaticvoidmain(Stringargs)SofteemStudent3sstu=newSofteemStudent3();,使用new关键字调用构造方法,19,2019/12/3,通过带参数的构造方法,显式地为实例变量赋予初始值,publicclassSofteemStudent3privateStringname;/教员姓名privateintage;/年龄privateStringcode;/学号/带参数的构造方法publicSofteemStudent3(StringpName,intpAge,StringpCode)name=pName;age=pAge;/可以增加对age等属性的存取限制条件code=pCode;publicStringintroduction()return大家好!我是+name+,我今年+age+岁,学号+code;,带参数的构造方法,20,2019/12/3,通过调用带参数的构造方法,简化对象初始化的代码,publicclassSofteemStudent3Testpublicstaticvoidmain(Stringargs)SofteemStudent3sstu=newSofteemStudent3(“杨过,22,“007);System.out.println(roduction();,创建对象时,一并完成了对象成员的初始化工作,大家好!我是杨过,我今年22岁,学号007,21,2019/12/3,对象的构造和初始化,Students1;-为引用类型变量分配引用空间newStudent(Lisa,Male,1,18);创建一个新的对象,并进行属性(实例变量)的默认初始化各种数据类型作为实例变量时的默认初始值参见下表,22,2019/12/3,对象的构造和初始化,执行构造方法:将传递进来的四个参数的值分别赋给四个属性s1=newStudent(Lisa,Male,1,18);,23,2019/12/3,对象的构造和初始化,最后,对引用类型变量s1赋值。将新创建的Student对象的存储空间的首地址赋给s1,24,2019/12/3,构造方法小结,构造方法是类的一种特殊方法,它的特殊性主要体现在如下的几个方面:1、构造方法的方法名与类名相同。2、构造方法没有返回类型。3、构造方法的主要作用是完成对类对象的初始化工作。4、构造方法不能像一般方法那样用“对象.”显式地直接调用。(而是在创建新对象的同时,系统自动调用该类的构造方法为新对象初始化。),25,2019/12/3,一个类中可以定义多个构造方法吗?,26,2019/12/3,生活中的方法重载,类,方法,方法参数,方法实现,兰博司机,轿车,巴士,火车,驾驶,启动、行驶、,等待乘客上车、启动、行驶、到站停车、,正点发车、行驶、到站停车、,如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同,27,2019/12/3,方法重载已经是老朋友了。还记得第一天写的System.out.println()吗?,publicclassTestpublicstaticvoidmain(Stringargs)inti=0;charc=z;Stringstr=hello;System.out.println(i);System.out.println(c);System.out.println(str);,PrintStream,println(int)println(char)println(String),方法名相同,参数类型不同,调用不同的println方法,方法重载,28,2019/12/3,构造方法重载是方法重载的典型示例,publicclassSofteemStudent4privateStringname;/学员姓名privateStringdirection=“java”;/所学方向publicSofteemStudent4(Stringname)=name;/设定学员姓名publicSofteemStudent4(Stringname,Stringdirection)=name;/设定学员姓名this.direction=direction;/设定学员的所学方向publicStringintroduction()return“大家好!我是”+direction+“方向的+name;,构造方法重载,29,2019/12/3,通过调用不同的构造方法来表达对象的多种初始化行为例如:默认情况下,学员来学java,初始化时,只需提供学员姓名有时,需要提供所学方向及学员姓名,publicclassSofteemStudent4Testpublicstaticvoidmain(Stringargs)SofteemStudent4sstu=newSofteemStudent4(“胡斐);System.out.println(roduction();SofteemStudent4sstu2=newSofteemStudent4(“郭靖,“.net);System.out.println(roduction();,大家好!我是java方向的胡斐大家好!我是.net方向的郭靖,30,2019/12/3,构造方法的重载,一个类的若干个构造方法之间可以相互调用。当类中一个构造方法需要调用另一个构造方法时,可以使用关键字this,同时这个调用语句应该是该构造方法的第一个可执行语句。使用this域来调用同类的其他构造方法,其优点是可以最大限度地提高对已有代码的利用程度,提高程序的抽象、封装程度,以及减少程序维护的工作量。,31,2019/12/3,构造方法重载是方法重载的典型示例,publicclassSofteemStudent4privateStringname;/学员姓名privateStringdirection=“java”;/所学方向publicSofteemStudent4(Stringname)=name;/设定学员姓名publicSofteemStudent4(Stringname,Stringdirection)this(name);/设定学员姓名this.direction=direction;/设定学员的所学方向publicStringintroduction()return“大家好!我是”+direction+“方向的+name;,构造方法重载,32,2019/12/3,给定如下Java代码,请指出代码中的错误,并解释原因。,publicclassSampleprivateintx;publicSample()x=1;publicSample(inti)x=i;publicintSample(inti)x=i;returnx+;privateSample(inti,Strings)publicSample(Strings,inti)privateSampla(inti)x=i+;privatevoidSampla(inti)x=i+;,无参构造方法,带参构造方法,不是构造方法,带参构造方法,带参构造方法,名称与类名不相同,不是构造方法,33,2019/12/3,多态性,多态性是指同名的不同方法在程序中共存。即为同一个方法定义几个版本,运行时根据不同情况执行不同的版本。调用者只需使用同一个方法名,系统会根据不同情况,调用相应的不同方法,从而实现不同的功能。多态性又被称为“一个名字,多个方法”。,34,2019/12/3,多态性的实现,重载实现多态性(overload)通过定义类中的多个同名的不同方法来实现。编译时是根据参数(个数、类型、顺序)的不同来区分不同方法的。由于重载发生在同一个类中,不能再用类名来区分不同的方法了,所以在重载中采用的区分方法是使用不同的形式参数表,包括形式参数的个数不同、类型不同或顺序的不同。重载的方法和返回类型没有关系。(若只有返回类型不同则报错),35,2019/12/3,例子MathLib.java,publicintadd(inta,intb)returna+b;publicintadd(intb,inta)returnb+a;publicintadd(doublea,intb)return(int)a+b+1;publicintadd(intb,doublea)returnb+(int)a+1;publicintadd(inta,intb,intc)returna+b+c;publicdoubleadd(doublea,intb)returna+b;,36,2019/12/3,static关键字,static关键字用来修饰变量、方法和内部类,称这些变量、方法和内部类为静态变量、静态方法和静态内部类static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”本质特点是:它们不属于任何一个类的具体对象。不保存在某个对象的内存区域中,而是保存在类的内存区域的公共存储单元。如果访问控制权限允许,可不必创建该类对象而直接使用类名加“.”调用static不可用于修饰构造器,37,2019/12/3,例子MathLib.java,publicclassMathLib/*园周率pi*/publicstaticdoublePI=3.1415927;/*园面积,pi*r2*paramr*return*/publicstaticdoublecircleArea(doubler)returnPI*r*r;,38,2019/12/3,调用这个方法时,可以使用类名做前缀,也可以使用某一个具体的对象名;通常使用类名。非static的方法是属于某个对象的方法,在创建这个对象时,对象的方法在内存中拥有自己专用的代码段,而static的方法是属于整个类的,它在内存中的代码段是随着类的定义而装载,不被任何一个对象单独拥有;由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,也即,static方法只能处理static域。如程序入

温馨提示

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

评论

0/150

提交评论