![面向对象特性_第1页](http://file4.renrendoc.com/view/c0b679322532f1469a8c9a7a4eb86e18/c0b679322532f1469a8c9a7a4eb86e181.gif)
![面向对象特性_第2页](http://file4.renrendoc.com/view/c0b679322532f1469a8c9a7a4eb86e18/c0b679322532f1469a8c9a7a4eb86e182.gif)
![面向对象特性_第3页](http://file4.renrendoc.com/view/c0b679322532f1469a8c9a7a4eb86e18/c0b679322532f1469a8c9a7a4eb86e183.gif)
![面向对象特性_第4页](http://file4.renrendoc.com/view/c0b679322532f1469a8c9a7a4eb86e18/c0b679322532f1469a8c9a7a4eb86e184.gif)
![面向对象特性_第5页](http://file4.renrendoc.com/view/c0b679322532f1469a8c9a7a4eb86e18/c0b679322532f1469a8c9a7a4eb86e185.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象特性第1页,共32页,2023年,2月20日,星期四本章内容this关键字static关键字package和import语句类的继承访问控制方法的重写Object类对象转型多态抽象类接口第2页,共32页,2023年,2月20日,星期四this关键字在类的方法定义中使用的this关键字代表使用该方法的对象的引用。当必须指出当前使用方法的对象是谁时要使用this。有时使用this可以处理方法中成员变量和参数重名的情况。
publicclassLeaf{inti=0;publicLeaf(inti){this.i=i;}Leafincreament(){i++;returnthis;}voidprint(){System.out.println("i="+i);}publicstaticvoidmain(String[]args){Leafleaf=newLeaf(100);leaf.increament().increament().print();}}第3页,共32页,2023年,2月20日,星期四static关键字静态成员变量在不创建类得对象的情况下,也可以使用,它是所有对象共有的变量,普通成员变量只有在创建了类的对象后才能被使用,与此相反,静态变量可以不先创建对象而直接使用。静态变量的声明如下:staticinta;
类.a=10;
对象.a=20;第4页,共32页,2023年,2月20日,星期四publicclassTest{
staticinta;
intb;
publicstaticvoidmain(String[]args){Test.a=10;Testt1=newTest();Testt2=newTest();System.out.println(t1.a);t1.a=20;System.out.println(t1.a);t2.a=30;System.out.println(Test.a);
}}第5页,共32页,2023年,2月20日,星期四静态方法只有在对象存在的条件下,我们才可以用成员变量和方法。然而,静态方法则不需要首先创建对象,可以直接调用它,在使用静态方法的时候一定要记住不可以在静态的方法中调用非静态的变量,如下程序:publicclassTest{ inta; staticvoidsetA(intb){ a=b; } publicstaticvoidmain(Stringargs[]){ Test.setA(10); }}第6页,共32页,2023年,2月20日,星期四静态变量与静态方法到底在什么方法中才能使用呢?如下程序publicclassTest{ staticinta; staticvoidhello(){ System.out.println("您好......");} staticvoidsetA(intb){ a=b; hello(); } voidprintA(){ System.out.println(a); hello(); } publicstaticvoidmain(Stringargs[]){ Test.setA(100); Testt=newTest(); t.printA();} }第7页,共32页,2023年,2月20日,星期四package和import语句为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间。第8页,共32页,2023年,2月20日,星期四package和import语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。
它的格式为:packagepkg1[.pkg2[.pkg3…]];Java编译器把包对应于文件系统的目录管理,package语句中,用‘.’来指明包(目录)的层次,例如使用语句packagecom.cstp;则该文件中所有的类位于.com\cstp目录下第9页,共32页,2023年,2月20日,星期四如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.cstp.MyClass),Java编译器才会在找到该类。也可以使用import在文件的开头引入要使用到的类;例如:可以不需要用import语句直接使用java.lang包中的类。importcom.cstp.MyClass;importjava.util.*;//引入java.util包中所有的类
.........MyClassmyClass=newMyClass();//可以直接使用类名
.........第10页,共32页,2023年,2月20日,星期四Packageimport总结如果想将一个类放入包中,在这个类源文件第一句话写package必须保证该类的class文件位于正确目录下另外的类想访问的话:写全名引入*具体类名访问位于同一个包中的类不需要引用第11页,共32页,2023年,2月20日,星期四类的继承与权限控制Java中使用extends关键字实现类的继承机制通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)。Java只支持单继承,不允许多继承:一个子类只能有一个基类一个基类可以派生出多个子类例子:TestExtends.java第12页,共32页,2023年,2月20日,星期四访问控制Java权限修饰符publicprotectedprivate置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。对于class的权限修饰只可以用public和default。public类可以在任意地方被访问default类只可以被同一个包内部的类访问修饰符类内部同一个包子类任何地方privateYesdefault|packageYesYesprotectedYesYesYespublicYesYesYesYes第13页,共32页,2023年,2月20日,星期四方法的重写(OverWriteOverRide)在子类中可以根据需要对从基类中继承来的方法进行重写。重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。重写方法不能使用比被重写方法更严格的访问权限。例子:TestOverWrite.java第14页,共32页,2023年,2月20日,星期四super关键字在Java类中使用super来引用基类的成分;例如:classFatherClass{publicintvalue;publicvoidf(){value=100;System.out.println("FatherClass.value="+value);}}classChildClassextendsFatherClass{publicintvalue;publicvoidf(){super.f();value=200;System.out.println("ChildClass.value="+value);System.out.println(value);System.out.println(super.value);}}第15页,共32页,2023年,2月20日,星期四继承中的构造方法1、子类的构造过程中必须调用其基类的构造方法。2、子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
3.如果使用super,必须写在子类构造方法的第一行。
4.如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法。
如果子类的构造方法中没有显示地调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。TestSuperSub.java第16页,共32页,2023年,2月20日,星期四Object类Object类是所有Java类的根基类如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
publicclassPerson{ ... }等价于:publicclassPersonextendsObject{ ...}第17页,共32页,2023年,2月20日,星期四对象转型一个基类的引用类型变量可以“指向”其子类的对象。一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。第18页,共32页,2023年,2月20日,星期四对象转型实例(1)classAnimal{ publicStringname;Animal(Stringname){ =name; }}classCatextendsAnimal{ publicStringeyeColor; Cat(Stringn,Stringc){ super(n);eyeColor=c; }}ClassDogextendsAnimal{ publicStringfurColor; Dog(Stringn,Stringc){ super(n);furColor=c; }}第19页,共32页,2023年,2月20日,星期四对象转型实例(2)publicclassTest{ publicstaticvoidmain(String[]args){ Animala=newAnimal("name"); Catc=newCat("catname","blue"); Dogd=newDog("dogname","black");
System.out.println(ainstanceofAnimal);//true; System.out.println(cinstanceofAnimal);//true; System.out.println(dinstanceofAnimal);//true; System.out.println(cinstanceofCat);//true;
a=newDog("bigyellow","yellow"); System.out.println();//bigyellow System.out.println(ainstanceofAnimal);//true; System.out.println(ainstanceofDog);//true; Dogd1=(Dog)a;//要加强制转换符
System.out.println(d1.furColor);//yellow }}第20页,共32页,2023年,2月20日,星期四多态多态源于希腊语,本意为“拥有多种形态”,在Java中,它指的是拥有相同形式,但根据不同的情形拥有不同机能的特性。例子,“数字+数字=数字”,然而,“String对象+数字=String对象”,根据不同的情形,“+”运算符拥有不同的功能,既“+”运算符具有多态性。还有实现了重载或重写的方法拥有相同的名字,但不同情形下,他们又拥有不同的功能,所以重载和重写也是一种多态。第21页,共32页,2023年,2月20日,星期四父类的引用指向子类对象从对象的内存角度来理解试试.
假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存.
现在通过代码来看看内存的分配情况:
Father
f
=
new
Father();//系统将分配1M内存.
Son
s
=
new
Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
Son
s1
=
s;//s1指向那1.5M的内存.
Father
f1
=
(Father)s;//这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中).
Son
s2
=
(Son)f;//这句代码运行时会报ClassCastException.因为f中只有1M内存,而子类的引用都必须要有1.5M的内存,所以无法转换.
Son
s3
=
(Son)f1;//这句可以通过运行,这时s3指向那1.5M的内存.由于f1是由s转换过来的,所以它是有1.5M的内存的,只是它指向的只有1M内存.第22页,共32页,2023年,2月20日,星期四抽象类用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。如果重写不了,应该声明自己为抽象。抽象类不能被实例化。抽象方法只需声明,而不需实现。例子:第23页,共32页,2023年,2月20日,星期四
abstractclassAnimal{privateStringname;Animal(Stringname){=name;}publicabstractvoidenjoy();}classCatextendsAnimal{privateStringeyesColor;Cat(Stringn,Stringc){super(n);eyesColor=c;}publicvoidenjoy(){System.out.println ("猫叫声......");}}第24页,共32页,2023年,2月20日,星期四Final关键字final修饰的变量的值不能够被改变final的成员变量final的局部变量(形参)final修饰的方法不能够被重写final修饰的类不能够被继承例子:第25页,共32页,2023年,2月20日,星期四接口接口(interface)是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。接口定义举例: publicinterfaceRunner{ publicstaticfinalintid=1; publicvoidstart(); publicvoidrun(); publicvoidstop(); }第26页,共32页,2023年,2月20日,星期四接口特性接口可以多重实现;接口中声明的属性默认为public的;也只能是public的;接口中只能定义抽象方法,而且这些方法默认为public的、也只能是public的;接口可以继承其它的接口,并添加新的属性和抽象方法。第27页,共32页,2023年,2月20日,星期四接口多个无关的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:
<modifier>class<name>[extends<superclass>] [implements<interface>[,<interface>]*]{ <declarations>* }第28页,共32页,2023年,2月20日,星期四接口举例
interfaceSinger{publicvoidsing();publicvoidsleep();}classStudentimplementsSinger{publicvoidstudy(){System.out.println("studying");}
publicvoidsing(){System.out.println("studentissinging");}publicvoidsleep(){System.out.println("studentissleeping");}}第29页,共32页,2023年,2月20日,星期四一个类可以实现多个无关的接口
interfaceSinger{ publicvoidsing(); publicvoidsleep(); } interfacePainter{ publicvoidpaint(); publicvoideat(); }第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45175-2024鞋类整鞋试验方法粘扣带抗疲劳性能
- GB/T 45150-2024老龄化社会认知症包容性社群框架
- Piperidine-C2-piperazine-Boc-生命科学试剂-MCE-6657
- 10-S-Hydroxy-9-R-hexahydrocannabinol-生命科学试剂-MCE-1969
- 二零二五年度店铺转租合同(含租金递增机制)
- 2025年度考研培训课程资源包及后续就业指导服务合同
- 2025年度环境保护法律事务咨询服务合同
- 2025年度非全日制用工劳动协议书解除条件
- 2025年度足浴中心员工劳动合同与顾客服务标准
- 2025年度洗浴场所员工薪酬福利保障合同
- 律师办理刑事案件基本流程及风险防范课件
- TQGCML 2624-2023 母婴级空气净化器 洁净空气和净化等级技术要求
- 潮汕民俗文化科普知识讲座
- 睡眠障碍护理查房课件
- 金融工程.郑振龙(全套课件560P)
- 英语演讲技巧和欣赏课件
- 【员工关系管理研究国内外文献综述2800字】
- 六年级语文下册阅读及参考答案(12篇)
- 苏教版(苏少版)九年级美术下册全册课件
- 2022年江苏省盐城市中考英语试题及参考答案
- 中国文化简介英文版(ChineseCultureintroduction)课件
评论
0/150
提交评论