




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计lixiaodongmail@本讲重点类和对象常用修饰符继承与多态接口包的声明和使用lixiaodongmail@类类的声明成员变量成员方法构造方法方法重载this关键字内部类和抽象类类的使用lixiaodongmail@类的声明类的定义一般形式如下:[modifiers]classclassname [extends
superclass[implementsinterfaces]]{
type
variable;//定义类的成员变量,数量不限
.........
typemethodname1(parameterlist){
//定义类的方法成员,数量不限
methodbody; } .........}lixiaodongmail@类的修饰符修饰符含义abstract声明抽象类,需要子类提供方法实现final声明最终类,不能被继承public声明公共类,能被任何对象访问默认声明默认,同一包对象可以访问publicclassPen{publicStringcolor;publicvoidsetColor(Stringc){ color=c;}}lixiaodongmail@成员变量类的成员变量表明类的状态,例如,在Pen类中声明的成员变量color,表示的是笔的颜色。定义成员变量的一般格式如下:[modifiers]typeinstance-variable;
type是成员变量的数据类型,instance-variable是变量名,在一个类中,成员变量应该是惟一的,且是一个合法的标志符;[modifiers]是可选的成员变量修饰符lixiaodongmail@成员变量修饰符修饰符含义final指定此变量的值不能改变默认默认修饰符,同一包中可以访问该变量public可以被任何对象访问private只允许在自己类内部访问static声明该变量为所有对象共享lixiaodongmail@成员方法类的成员方法定义了类的行为,一般用于对类的成员变量进行操作。定义成员方法的一般格式如下:[modifiers]typemethodname(parameter-list){ method-body;}
type是成员方法的返回值类型,其类型可以是Java中的任何数据类型;methodname是方法名,可以是任何一个合法的标识符;parameter-list是方法参数。lixiaodongmail@成员方法修饰符修饰符含义final指定此方法不能覆盖默认默认修饰符,同一包中可以访问该方法public可以被任何对象访问private只允许在自己类内部访问static声明该方法为所有对象共享lixiaodongmail@构造方法构造方法是一种特殊的方法,它的名称与类的名称相同,并且它不返回任何值,这是因为一个类的构造方法的返回值类型就是类本身。构造函数一般不能由编程人员显式的直接调用。例如,可以为Pen类定义一个构造函数,代码如下:Pen(StringColor){color=Color;}lixiaodongmail@classPoint{ intx,y; Point(intx1,inty1){ //构造方法
x=x1; y=y1; }}lixiaodongmail@构造方法构造方法没有返回值。构造方法不能从父类继承。如果没有为类定义任何构造方法,系统将为该类定义一个缺省的默认构造方法,该方法既没有形式参数,也没有任何具体的语句,不完成任何操作。构造方法不能直接通过方法名引用,必须通过new运算符。在构造方法中可以调用当前类和其父类的构造方法,但必须是方法体的第一条语句。lixiaodongmail@构造方法重载重载是根据参数的个数与类型来区分的。classPoint{intx,y;publicPoint(){}publicPoint(intx,inty){this.x=x;this.y=y;}}lixiaodongmail@this关键字Java包含一个特殊的引用——this引用。this引用总是指向当前对象,即this引用当前对象。this用法引用与参数同名成员变量;用在构造方法中,调用同一个类中的其他构造方法lixiaodongmail@publicclassPen{publicStringcolor=null;publicintlength;publicvoidsetColor(Stringcolor){
this.color=color;}Pen(Stringcolor){
this.color=color; }Pen(Stringcolor,intlength){
this(color);
this.length=length;}}lixiaodongmail@内部类在一个类内部定义的类,就是内部类。内部类可以直接访问外部类的成员,包括private成员,但是,内部类的成员却不能被外部类直接访问。lixiaodongmail@publicclassTest{ //…}publicclassA{ //…}publicclasstest{ //… publicclassa{ //… }}内部类lixiaodongmail@publicclassOuterClass{privateintdate;publicvoidm(){//...}classInnerClass{publicvoidmi(){
date++;m();}}}lixiaodongmail@内部类内部类被编译成名为OuterClassName$InnerClassName.class的类。内部类可以引用定义在它外部类中的数据和方法。可见性修饰符可以作用于内部类。内部类可以在外部创建,创建语法格式为:OuterClass.InnerClassinnerObject= outerObject.newInnerClass();lixiaodongmail@抽象类和抽象方法用abstract修饰符修饰的类是抽象类。抽象类不能被实例化。抽象类中可以包含非抽象的方法。抽象方法也是用abstract来修饰。抽象方法只需要声明,不需要实现。含有抽象方法的类必须声明为抽象类,所有抽象方法被实现的子类才能生成对象。lixiaodongmail@publicabstractclassPen{Stringcolor;voidsetColor(Stringcolor){this.color=color;}StringgetColor(){returncolor;}publicabstractvoidmymethod();}publicclasssomePen
extendsPen{publicvoidmymethod(){System.out.println(“OK”);
}}lixiaodongmail@对象对象的创建和使用匿名对象用finalize方法清除对象对象的比较lixiaodongmail@对象的创建和使用创建对象Type对象名=newtype([参数列表])对象使用引用对象成员变量<对象名>.<变量名>引用对象成员方法<对象名>.<方法名>([参数列表])lixiaodongmail@匿名对象创建对象后,在调用该对象的方法时,也可以不定义对象的引用,而直接调用这个对象的方法,这样的对象叫做匿名对象
Penp1=newPen(); p1.setColor(“Green”);
newPen().setColor(“Green”);在下面的情况下可以使用匿名对象。如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。lixiaodongmail@用finalize方法清除对象在一个对象被销毁之前,它将调用一个称为终结函数的特殊方法,该方法完成一些必须的清除工作,如释放资源等。这个特殊方法总是被命名为finalize。一个类中至多有一个终结函数,而且许多类根本不需要终结函数finalize()方法通常声明为protected,这样能够防止它被外部的方法意外地调用lixiaodongmail@classabc{
protectedvoidfinalize()throwsThrowable{ System.out.println("finalized"); }}publicclassb{ publicstaticvoidmain(Stringargs[]){ abca=newabc(); a=null; System.gc(); }}lixiaodongmail@对象的比较对象之间的比较,可以使用equals方法或“==”操作符,equals()方法主要用于比较两个对象的内容是否相同,“==”操作符主要用于比较两个变量的值是否相等lixiaodongmail@classtest{ publicstaticvoidmain(Stringargs[]){ Doubled1=newDouble(1); Doubled2=newDouble(1); Doubled3=d1; System.out.println(d1==d2); System.out.println(d1==d3); System.out.println(d1.equals(d2)); System.out.println(d1.equals(d3)); }}lixiaodongmail@常用修饰符访问控制修饰符static修饰符final修饰符lixiaodongmail@访问控制修饰符Java规定可以选择4种访问控制方式:publicprivateprotected默认
lixiaodongmail@Java修饰符的访问权限publicdefaultprotectedprivate可被相同包的非子类访问是是是否可被相同包的子类访问是是是否可被不同包的非子类访问是否否否可被不同包的子类访问是否否否可被相同包的子类继承是是是否可被不同包的子类继承是否是否lixiaodongmail@classXiuShiFu{
publicinti;
privateintj;}classTestXiuShiFu{ publicstaticvoidmain(Stringargs[]){ XiuShiFux=newXiuShiFu(); x.i=10;
x.j=20; }}lixiaodongmail@staticstatic可以修饰数据成员和成员方法,表明是静态的,静态成员被类的所有对象共享静态成员的访问类名.静态成员对象名.静态成员(不建议使用)非静态成员的访问对象名.非静态成员lixiaodongmail@b…t1.at2.atestt1=newtest();testt2=newtest();classtest{inta;staticintb;}t1.bt2.blixiaodongmail@classCount{
privateintnumber;//表示每个类对象的序列号
privatestaticintcounter=0;//静态变量,负责计数
publicCount(){ counter++; number=counter; }publicstaticvoidmain(Stringargs[]){
CountA1=newCount(); System.out.println("A1是第:"+A1.number+"个对象");
CountA2
=newCount(); System.out.println("A2是第:"+A2.number+"个对象");
CountA3
=newCount(); System.out.println("A3是第:"+A3.number+"个对象"); }}System.out.println(A1.counter);System.out.println(Count.counter);lixiaodongmail@static静态方法只能直接访问静态成员,不能直接访问非静态成员。非静态方法可以直接访问非静态成员,也可以访问静态成员。main()方法是静态的,所以在该方法中不能直接访问该类中的非静态成员,必须首先创建一个实例对象后,才能通过这个对象去访问类中的非静态成员。lixiaodongmail@publicclasstest{publicinttotal(inta,intb){ returna+b;}publicstaticvoidmain(String[]args){ intnum1=3; intnum2=4; System.out.println(total(num1,num2));
}}statictestt1=newtest();System.out.println(t1.total(num1,num2));lixiaodongmail@final修饰符final修饰符用于定义类、成员变量和成员方法的非继承性修饰类–最终类,不能被继承修饰成员变量—常量,不能被覆盖修饰方法—不能被子类覆盖lixiaodongmail@
继承与多态继承方法覆盖方法重载super关键字多态性对象类型转换lixiaodongmail@继承类的继承在类的定义过程中,用关键字extends来声明的。一般格式如下:[ClassModifier]classClassName[extendsSuperClass][implementinterface]{ //类体}子类可以继承父类的公共成员方法和成员变量,不能继承私有成员方法、成员变量以及构造方法子类可以定义与父类成员变量相同的变量,称为成员变量的隐藏。lixiaodongmail@classPen{StringmyString="Pen'sString";voidshowPen(){System.out.println(myString);}}classPencilextendsPen{StringmyString="Pencil'sString";voidshowPencil(){System.out.println(myString);}}publicclassNewClass{publicstaticvoidmain(Stringargs[]){Pencilpcl=newPencil();pcl.showPen();pcl.showPencil();}}lixiaodongmail@方法覆盖在类的继承中,当子类的成员变量与父类的成员变量同名时,子类的成员变量会隐藏父类的成员变量。同样,子类也可以重新定义与父类同名的方法,覆盖父类的方法。方法覆盖:在子类中,定义名称、参数个数与类型均与父类相同的方法,用于重写父类中方法的功能。lixiaodongmail@classPen{voiddisplay(){System.out.println("Pen'sfunction");}}classmyPenextendsPen{voiddisplay(){System.out.println("myPen'sfunction");}}publicclassOverrideExam{publicstaticvoidmain(Stringargs[]){myPenmp=newmyPen();mp.display();}}lixiaodongmail@方法重载方法的重载:在一个类的定义中有多个名称相同的成员方法,但每个方法的参数类型、参数的个数可以不同,即类对自身已有的同名方法的重新定义lixiaodongmail@classPen{voidWrite(){System.out.println("Writenothing");}voidWrite(Stringlanguage){System.out.println("Writein"+language);}voidWrite(floatnum1,floatnum2){ System.out.print(num1+"+"+num2+"=");}}publicclassOverloadMethod{publicstaticvoidmain(Stringargs[]){Penp=newPen();
p.Write();
p.Write(”English”);
p.Write(2.0f,3.1f);}}lixiaodongmail@super关键字Java中通过super关键字来实现对父类成员的访问。super—引用父类同名成员变量;用在构造方法中,调用父类中的构造方法lixiaodongmail@lixiaodongmail@多态性多态是一种在运行时调用重写方法的机制。因为子类通过继承具备了父类的所有属性,所以,子类对象可以作为父类对象使用,凡是在程序中可以使用父类对象的地方,都可以用子类对象来代替。对于重写的方法,Java会根据调用该方法的实例的类型来决定选择哪个方法。动物--吃人--吃狗--吃动物a;a=new人a.吃a=new狗a.吃消息--上课教师—上课学生—上课消息a;a=new教师a.上课a=new学生a.上课lixiaodongmail@classPen{voiddisplay(){System.out.println("Pen");}}classmyPenextendsPen{voiddisplay(){System.out.println("myPen");}}classPencilextendsPen{voiddisplay(){System.out.println("Pencil");}}publicclassNewClass{publicstaticvoidmain(Stringargs[]){Penp1=newPen();Penp2=newmyPen();Penp3=newPencil();p1.display();p2.display();p3.display();}}lixiaodongmail@对象类型转换Java中两个不同类型对象之间可以转换,两个转换的对象之间应该具有继承关系,不是任意两个类。子类对象类型可以转换成它的父类类型。父类对象转换成子类对象类型时,要求父类对象实际上是子类的一个实例。Penp=newPencil();doubled=123;Pencilp1=(Pencil)p;inti=(int)d;lixiaodongmail@接口接口的定义接口的实现lixiaodongmail@接口的概念接口(interface)是Java所提供的一种重要功能,它的结构和抽象类非常相似。接口是一种特殊的类,但接口与类存在着本质的区别。类有成员变量和成员方法,而接口却只有常量和抽象方法,也就是说接口的成员变量必须初始化,同时接口中的所有方法全部为abstract方法,一个类可以实现多个接口。Java语言通过接口使得互不相关的类具有相同的行为。
lixiaodongmail@接口的定义定义接口的一般格式如下:[public]interfaceinterfaceName[extendssuperInterface]{ //接口体……}其中,各字段的含义如下。public是可选项,如果将接口定义为public类型,则处于任何位置的类都能够访问该接口。如果没有指明接口的访问类型,则默认只有相同包中的类可以访问该接口的定义。interface是定义接口的关键字。interfaceName为定义的接口的名字,该名称为合法的Java标识符。extends子句表示该接口有父接口。lixiaodongmail@接口的定义接口包含常量定义和方法定义,在接口中定义的常量可以被多个类共享,具有final、static属性;接口中只对方法进行声明,没有方法体,而且是用分号结尾,声明的方法具有abstract属性。lixiaodongmail@接口的实现一个类可以实现多个接口。[ClassModifier]classClassName[implementinterface]{ //类体}上述定义中,implement
interface字段为需要实现的接口。但该选项不是必选项,并且一个类可以实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政管理师考试综合复习资料及答案
- 广东工业大学网络机房基础设施信息化建设项目公开招标文件
- 行政管理师考试与职场发展的关系分析及试题及答案
- 项目管理中的效率提升策略试题及答案
- 广电5G BOSS系统营业受理操作手册
- 银行从业资格证考试全景试题及答案
- 微生物病原体识别技术试题及答案
- 理解证券从业资格证考试的价值取向试题及答案
- 病原体分离培养问题试题及答案
- 注册会计师考试要掌握技能试题及答案
- 成人体外心肺复苏专家共识(2023版)解读
- 医院食堂运营食堂餐饮服务投标方案(技术标)
- 医院耗材SPD解决方案(技术方案)
- 岗位调动确认书
- 光伏电站事故处理规程
- 《职场解压与情绪》课件
- 宠物共同抚养协议书范本
- 《银行保险机构公司治理准则》解读
- 中外设计史复习题
- 水源井工程施工方案
- (完整版)电路基础选择题100题
评论
0/150
提交评论