面向对象的程序设计.ppt

上传人:wj 文档编号:9570875 上传时间:2023-05-20 格式:PPT 页数:35 大小:484.50KB
下载 相关 举报
面向对象的程序设计.ppt_第1页
第1页 / 共35页
面向对象的程序设计.ppt_第2页
第2页 / 共35页
面向对象的程序设计.ppt_第3页
第3页 / 共35页
面向对象的程序设计.ppt_第4页
第4页 / 共35页
面向对象的程序设计.ppt_第5页
第5页 / 共35页
面向对象的程序设计.ppt_第6页
第6页 / 共35页
面向对象的程序设计.ppt_第7页
第7页 / 共35页
面向对象的程序设计.ppt_第8页
第8页 / 共35页
面向对象的程序设计.ppt_第9页
第9页 / 共35页
面向对象的程序设计.ppt_第10页
第10页 / 共35页
面向对象的程序设计.ppt_第11页
第11页 / 共35页
面向对象的程序设计.ppt_第12页
第12页 / 共35页
面向对象的程序设计.ppt_第13页
第13页 / 共35页
面向对象的程序设计.ppt_第14页
第14页 / 共35页
面向对象的程序设计.ppt_第15页
第15页 / 共35页
面向对象的程序设计.ppt_第16页
第16页 / 共35页
面向对象的程序设计.ppt_第17页
第17页 / 共35页
面向对象的程序设计.ppt_第18页
第18页 / 共35页
面向对象的程序设计.ppt_第19页
第19页 / 共35页
面向对象的程序设计.ppt_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

面向对象的程序设计.ppt

《面向对象的程序设计.ppt》由会员分享,可在线阅读,更多相关《面向对象的程序设计.ppt(35页珍藏版)》请在冰点文库上搜索。

面向对象的程序设计.ppt

面向对象程序设计,本课内容,方法的重载This关键字对象的创建和初始化细节几种常用的Java类Java类的static成员final关键字,方法重载,在同一个类中可以定义多个同名方法-方法重载publicclassPrintStreampublicvoidprintln(inti)publicvoidprintln(floatf)publicvoidprintln(Strings)重载方法的参数列表必须不同重载方法的返回值类型可以相同,也可以不同,构造方法重载(代码重用),构造方法重载举例:

publicclassPersonpublicPerson(Stringname,intage,Dated)publicPerson(Stringname,intage)publicPerson(Stringname,Dated)构造方法重载,参数列表必须不同可以在构造方法的第一行使用this()关键字调用其它(重载的)构造方法,构造方法重载举例,importjava.util.Date;publicclassPersonprivateStringname;privateintage;privateDatebirthDate;publicPerson(Stringname,intage,Dated)this.name=name;this.age=age;this.birthDate=d;publicPerson(Stringname,intage)this(name,age,null);publicPerson(Stringname,Dated)this(name,30,d);publicPerson(Stringname)this(name,30);,Ex1,编写应用程序TestOverride.java测试前页Person.java中的重载方法,构造方法不能继承,子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法在一个Java类中可以通过两种方式获得构造方法使用系统默认的无参构造方法显式定义一个或多个构造方法一旦显式定义了构造方法,则系统不再提供默认构造方法,子类的构造方法中一定要调用父类构造方法,在子类的构造方法中可使用语句super(argument_list)显式调用父类的构造方法如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错,调用父类构造方法举例,publicclassStudentextendsPersonprivateStringschool;publicStudent(Stringname,intage,Strings)super(name,age);school=s;publicStudent(Stringname,Strings)super(name);school=s;publicStudent(Strings)/super();school=s;,this/super

(1),this是对当前对象的一个引用super是对父类的一个引用,什么叫当前对象的一个引用呢?

我们先来看一些例子classBoxdoublewidth;doubleheight;doubledepth;doublevolume()returnwidth*height*depth;voidsetDim(doublewidth,doubleheight,doubledepth)width=width;height=height;depth=depth;,Java中特殊而且非常有用的引用,this.this.this.,按照变量定义域的规则,这种情况下成员变量(蓝)会被方法中局部变量(红)覆盖掉,使用this引用后,成员又重新暴露出来了,用this引用解决成员变量与成员方法的局部变量名称冲突的问题,this

(2),如果我们用下列语句Boxbx1=newBox();Boxbx2=newBox();/生成了两个Box的对象从外部看前一个对象的引用是bx1,从它的内部看引用则是this同样道理,从外部看第二个对象的引用是bx2,而从bx2的内部看它的引用也是this这就是说,在一个对象的内部,如果想得到这个对象的引用,要用this,而不是它的名称从一个对象的内部看它的父类的对象就是super,this(3)/super,this作为输入参数,this表示本对象的getValue(Aa),调用父类的构造方法,调用父类的getValue()方法,classAA(intv)value=v;publicintgetValue(Aa)System.out.println(getValue(.)ofclassA);returna.value;protectedintgetValue()System.out.println(getValue()ofclassA);returnthis.getValue(this);protectedintvalue;classBextendsAB()super(7);publicintgetValue(Bb)System.out.println(getValue(.)ofclassB);returnb.value;protectedintgetValue()System.out.println(getValue()ofclassB);returnsuper.getValue();,this(4)/更多的例子,publicclassThisTestDemo1publicstaticvoidmain(Strings)Aa=newA(30);Bb=newB();System.out.println(a.getValue();System.out.println(b.getValue();,getValue()ofclassAgetValue(.)ofclassA30getValue()ofclassBgetValue()ofclassAgetValue(.)ofclassA7,a.getValue()的调用顺序调用a的getValue()调用a的getValue(Aa)返回a对象的value值,b.getValue()的调用顺序调用b的getValue()调用a的getValue()调用a的getValue(Aa)返回a对象的value值,使用this引用调用自己的构造方法,this(5),classBox/Box()width=10;height=10;depth=10;Box()this(10,10,10);Box(doublew)this(w,10,10);Box(doublew,doubleh,doubled)width=w;height=h;depth=d;doublevolume()returnwidth*height*depth;doublewidth;doubleheight;doubledepth;,如果没有进行初始值设置,就默认为10,10,10,如果设置了一个值,其它两个就默认为10,10,this(6)/更多的例子,调用自身构造方法的BoxclassclassBoxConstructorDemo3publicstaticvoidmain(Strings)Boxbox1=newBox();Boxbox2=newBox(15);Boxbox3=newBox(3,6,9);System.out.println(“Box1svolumeis”+box1.valume();System.out.println(“Box2svolumeis”+box2.valume();System.out.println(“Box3svolumeis”+box3.valume();,Box1svolumeis1000.0Box2svolumeis1500.0Box3svolumeis162.0,this/super(7),this用于引用自身对象的成员变量this.value;引用自身对象的成员方法this.volume();调用自身的构造方法this(10,10,10);,super用于引用父类对象的成员变量super.value;引用父类对象的成员方法super.getValue();调用父类的构造方法super(7);,在前面的例子里我们曾经这样用过,对象构造和初始化细节,分配存储空间并进行默认初始化按下述步骤初始化实例变量1.如有this()调用,则调用相应的重载构造方法,然后跳转到步骤5/super()和this()两者只能有其一2.显式或隐式追溯调用父类的构造方法super(.)(Object类除外)3.进行属性的显式初始化操作4.执行当前构造方法的方法体中其余的语句5.使用初始化程序和初始化块初始化成员6.执行构造器方法体中其他语句,构造和初始化对象举例,publicclassObjectpublicObject().publicclassPersonextendsObjectprivateStringname;privateintage=0;privateDatebirthDate;publicPerson(Stringn,Dated)/implicitsuper();隐含调用name=n;birthDate=d;publicPerson(Stringn)this(n,null);/间接调用父类的构造方法publicclassStudentextendsPersonprivateStringschool;publicStudent(Stringn,Stringd)super(n);school=d;,Ex2初始化过程引申,分析范例运行结果,然后实际运行验证,封装类,针对八种基本类型定义相应的引用类型封装类,封装类用法举例,inti=500;Integert=newInteger(i);intj=t.intValue();/j=500Strings=t.toString();/s=500Strings1=Integer.toString(314);/s1=“314”,Object类,Object类是所有Java类的根父类(最高父类)如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类publicclassPerson.等价于:

publicclassPersonextendsObject.,toString()方法,toString()方法在Object类中定义,其返回值是String类型,描述当前对象的有关信息在进行String类型与其它类型数据的连接操作时,自动调用toString()方法可以根据需要在用户自定义类型中重写toString()方法基本类型数据转换为String类型时,调用了对应封装类的toString()方法,=操作符与equals方法,=操作符与equals方法的区别:

equals()方法只能比较引用类型,=可以比较引用类型及基本类型;特例:

当用equals()方法进行比较时,对类File、String、Date及封装类(WrapperClass)来说,是比较类型及内容而不考虑引用的是否是同一个实例;用“=”进行比较时,符号两边的数据类型必须一致(可自动转换的数据类型除外),否则编译出错;而equals()只要比较的都是引用类型即可,=操作符与equals方法举例,classTestEquals/请自行定义能满足需要的MyDate类publicstaticvoidmain(Stringargs)MyDatem1=newMyDate(24,3,2001);MyDatem2=newMyDate(24,3,2001);if(m1=m2)System.out.println(m1=m2);elseSystem.out.println(m1!

=m2);if(m1.equals(m2)System.out.println(m1isequaltom2);elseSystem.out.println(m1isnotequaltom2);m2=m1;if(m1=m2)System.out.println(m1=m2);elseSystem.out.println(m1!

=m2);,Ex3,练习P16页=操作符与equals方法用法例子将1中的数据类型MyDate改为String或封装类型;体会其区别,关键字static,在Java类中声明变量、方法和内部类时,可使用关键字static做为修饰符。

static标记的变量或方法由整个类(所有实例)共享,如访问控制权限允许,可不必创建该类对象而直接用类名加.调用。

static成员也称类成员或静态成员,如:

类属性、类方法、静态方法等。

类属性应用举例,classPersonprivateintid;publicstaticinttotal=0;publicPerson()total+;id=total;publicclassOtherClasspublicstaticvoidmain(Stringargs)Person.total=100;System.out.println(Person.total);Personc=newPerson();System.out.println(Person.total);Personc2=newPerson();System.out.println(Person.total);,类方法应用举例,publicclassPersonprivateintid;privatestaticinttotal=0;publicstaticintgetTotalPerson()returntotal;publicPerson()total+;id=total;publicclassTestPersonpublicstaticvoidmain(Stringargs)System.out.println(Numberoftotalis+Person.getTotalPerson();Personp1=newPerson();System.out.println(Numberoftotalis+Person.getTotalPerson();,静态初始化,在类的定义体中、方法的外部可包含static语句块static语句块仅在其所属的类被载入时执行一次static块通常用于初始化static属性(类属性)classPersonpublicstaticinttotal;statictotal=100;/为total赋初值/其它属性或方法声明,静态初始化举例,classPersonpublicstaticinttotal;statictotal=100;System.out.println(instaticblock!

);publicclassTestpublicstaticvoidmain(Stringargs)System.out.println(total=+Person.total);System.out.println(total=+Person.total);,一旦用到了Person类,Singleton设计模式,classSingleprivatestaticSingleonlyone=newSingle();privateStringname;publicstaticSinglegetSingle()returnonlyone;privateSingle()publicclassTestSinglepublicstaticvoidmain(Stringargs)Singles1=Single.getSingle();Singles2=Single.getSingle();if(s1=s2)System.out.println(s1isequalstos2!

);,关键字final,在Java中声明类、属性和方法时,可使用关键字final来修饰。

final标记的类不能被继承。

final标记的方法不能被子类重写。

final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次,且在使用前必须被赋值。

final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值,然后才能使用。

关键字final应用举例,publicfinalclassTestpublicstaticinttotalNumber=5;publicfinalintid;publicTest()id=+totalNumber;publicstaticvoidmain(Stringargs)Testt=newTest();System.out.println(t.id);finalinti=10;finalintj;j=20;j=30;/非法,Ex4使用Static/final关键字,练习上述有关例程,体会static关键字的用法;练习前页例子及下述程序,并改正其错误,体会final关键字修饰变量时的用法;publicclassTestFinalpublicstaticvoidmain(Stringargs)inti=1;finalintj=10;j=100;finalintk;k=100;k=200;System.out.println(i=+i+j=+j+k=+k);,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2