java中特殊关键字_第1页
java中特殊关键字_第2页
java中特殊关键字_第3页
java中特殊关键字_第4页
java中特殊关键字_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

ObjectorientedadvancedJava特殊关键学习及面向对象原理进阶2目标掌握类的静态成员:static掌握继承的概念和用法:extends掌握抽象类的定义和用法:abstract掌握final关键字用法掌握接口的定义和用法:interface,implements多态例如了解包的使用:package3类的静态成员类中的静态变量、静态方法或静态代码块属于类,而不属于某个特定的对象。类的静态成员可以与类的名称一起使用,而无需创立类的对象。静态变量或方法也称为类的变量或方法。用static修饰符修饰,可以是变量、方法或代码块4静态变量不管创立了类的多少实例,整个类中静态变量的副本只有一个。引用静态变量的方法:通过引用类的任一实例通过类的名称〔建议〕classA{staticintx=0;

A(){x++;}}Aa1=newA();Aa2=newA();a1.x=100;a2.x=200;inty=a1.x;

通过类实例访问不是一个好方法Aa1=newA();Aa2=newA();A.x=100;A.x=200;inty=A.x;

声明为static的变量实质上就是全局变量通过类名访问5静态方法与静态方法相关的几个要点:类的静态方法只能访问其他的静态成员静态方法没有this静态方法不能被覆盖(重写)为非静态方法classA{staticinti=10;intj;

staticvoidsetValue(intx){

j=x;//出错

System.out.println(""+i);}}不能访问非静态变量j,可以访问静态变量iclassB{staticvoidtest(){}}classCextendsB{

voidtest(){}//出错}

6静态块如果需要通过计算来初始化静态变量,可以声明一个静态块。静态块仅在该类被加载时执行一次。只能初始化类的静态数据成员。

classA{

staticintx;//静态成员

inty;//非静态成员

static{

x=1; y=1; System.out.println("staticblock:"+x);}}

7被继承的类称为父类继承父类的类称为子类执行继承时,子类将获得父类的属性,并具有自身特有的属性。

Emoloyee类:namesexWorker类:categorydressAllowanceOfficer类:empClassvehicle职员类,具有姓名和性别两个属性工人类,继承了父类的姓名和性别属性外还包含类别和是否有服装津贴属性主任类,还包含级别和是否配备交通工具属性继承继承是面向对象编程技术的一块基石,它允许创立分等级层次的类。运用继承,可以创立一个通用类定义一系列一般特性。该类可以被更具体的类继承。8extends关键字extends关键字用于继承类。声明一个继承父类的类的通常形式如下:classsubclass-nameextendssuperclass-name{//类体}

没有extends,默认父类为Object只能有一个父类,即单继承子类继承父类的public和protected成员注意9super关键字super关键字用来解决如何直接访问或初始化从父类继承来的属性。super有两种通用形式:调用父类的构造函数,将构造细节通过继承链往上传递。注意:

super()(或其重载的构造函数)必须是在子类构造函数中的第一个执行语句。访问被子类成员覆盖(重写)的父类成员(成员变量和成员方法)。10继承例如classEmployee{

Stringname;//姓名

charsex;//性别

Employee(Stringn,chars){name=n;sex=s;}publicStringgetName(){returnname;}publicchargetSex(){returnsex;}}classWorkerextendsEmployee

{

charcategory;//类别

booleandressAllowance;//是否提供服装津贴Worker(Stringn,chars,charc,booleand){

super(n,s);

category=c;dressAllowance=d;}publicchargetCategory(){returncategory;}

publicbooleangetAll(){returndressAllowance;}}classInheDemo{publicstaticvoidmain(Stringargs[]){Workerw=newWorker("M.John",'M','B',true);

System.out.println("工人信息");

System.out.println("姓名

:"+w.getName());System.out.println("性别

:"+w.getSex());

System.out.println("类别

:"+w.getCategory());if(w.getAll())System.out.println("提供服装津贴");

elseSystem.out.println(“未提供服装津贴”);}}11方法覆盖〔override〕方法覆盖是Java实现多态性机制的另一种方式。在类层次结构中,如果子类中的一个方法与父类中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖〔重写〕。当一个覆盖方法通过父类引用被调用,Java根据当前被引用对象的类型来决定执行哪个版本的方法。可以通过super关键字调用直属父类中被覆盖的方法版本。12方法覆盖例如classSuperClass{inta;SuperClass(){a=10;}

publicvoidprintA(){System.out.println("父类中a="+a);}}classSubClassextendsSuperClass{inta;SubClass(inta){this.a=a;}

publicvoidprintA(){System.out.println("子类中a="+a);}}

publicclassOverrideDemo{publicstaticvoidmain(Stringargs[]){SuperClasss1=newSubClass(20);

s1.printA();}}将调用子类的printA方法13instanceof关键字classStudent{}classGraduateextendsStudent{}classUndergraduateStudentextendsStudent{}publicclassst{publicstaticvoidmain(String[]args){UndergraduateStudents1=newUndergraduateStudent();Graduates2=newGraduate();Studentx;

x=s1;if(xinstanceofUndergraduateStudent)System.out.println(“x是UndergraduateStudent类的实例。”);elseSystem.out.println(“x是Graduate类的实例。”);}}instanceof测试第一个参数的运行时类型是否为与第二个参数兼容的赋值。x在运行时指向s1,所以if语句条件返回true14Object类Object类是类体系结构的根Java系统中的每个类都是Object类直接或间接的子类Object类包括在java.lang包中此类定义了所有对象都具备的根本状态和行为可以用类型为Object的变量来引用任意类型的对象所以任何对象使用instanceofObject返回的结果都为真!15类型转换执行自动类型转换需要两个条件:接受转换的两种类型是兼容的目的类型数的范围比源类型的大强制类型转换语句的通用格式如下:〔目标类型〕valueUndergraduateStudents1=newUndergraduateStudent();

Graduates2=newGraduate();Studentx;x=s1;Graduates3=newGraduate();if(xinstanceofGraduate)

s3=(Graduate)x;注意:从父类到子类的转换,建议在转换前判断父类是否指向子类的对象byte->short->int->long->float->double16抽象类定义抽象类的目的是提供可由其子类共享的一般形式。子类可以根据自身需要扩展抽象类。抽象类不能实例化。抽象方法没有函数体。抽象方法必须在子类中给出具体实现。abstract修饰符可与类和方法一起使用17抽象类在以下情况下,某个类将成为抽象类直接定义为abstract当一个类的一个或多个方法为抽象方法时。当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时。当一个类实现一个接口,并且没有为所有抽象方法提供实现细节或方法主体时。18抽象类例如abstractclassEmployee{ intbasic=2000;

abstractvoidsalary();//抽象方法}classManagerextendsEmployee{voidsalary(){ System.out.println("薪资等于"+basic*5);}}

classWorkerextendsEmployee{voidsalary(){ System.out.println("薪资等于"+basic*2);}}

抽象方法没有方法主体在子类中提供实现在子类中提供实现19final关键字/final类final修饰符可应用于类、方法和变量。final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。声明为final的类不能被继承。final类例如:

finalclassTestFinal{inti=7;intj=1;voidf(){}}

classFurtherextendsTestFinal{}

final类不能被继承有继承就有进化!而final关键字代表进化终止!20final方法在方法声明中使用final关键字向编译器说明子类不能覆盖此方法。在声明类中,一个final方法只被实现一次。如果一个类为final类,那么它的所有方法都为隐式的final方法。classTestFinal{finalvoidf(){}}

classFurtherextendsTestFinal{finalvoidf(){}}

final方法不能被覆盖21final变量一个变量可以声明为final,这样做的目的是阻止它的内容被修改。声明final变量后,只能被初始化一次,然后就不能对其值进行修改。一个final变量实质上是一个常量。

classFinalDemo{ publicstaticvoidmain(Stringargs[]){finalintnoChange=20;

noChange=30;

}}

final变量不能被修改22接口一个接口可以从几个接口继承一个类可实现几个接口。Java程序一次只能继承一个类但可以实现几个接口。接口不能有任何具体的方法。接口也可用来定义可由类使用的一组常量,类型只能是publicstaticfinal,即为默认类型。接口提供“isa”关系。接口是一套标准和标准,没有具体的实现细节,只有常量和公有抽象方法。23创立接口//有方法的接口publicinterfacemyinterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}//定义程序使用的常量的接口publicinterfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}

定义一个接口:24创立接口用关键字implements实现接口,例如:classdemoimplementsmyinterface如果有一个以上接口被实现,那么用逗号隔开接口名称,如下所示:classdemoimplementsMycalc,Mycount25接口使用例如interfaceA{doubleg=9.8;voidshow();}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}26多态在面向对象程序设计中,多态性原那么是一个根本的设计原那么所谓多态就是针对不同的对象发同样的消息,这些对象的响应是不一样的。多态在生物界表现出来的就是生物多样性。多态例如程序演示AnimalHumanDogFishCatSwimmer27包package包可以是类、接口和子包的集合在Java中,包主要有以下用途:集合相关的类和接口有助于防止命名冲突访问控制:保护类、数据和方法package语句特性:放在第一句每个源文件最多只能一个包名应小写创立包的组织或团体的反向域名命名以java.*和javax.*开头的包名被保存28使用包定义包

packagemypackage;

访问Java包

温馨提示

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

评论

0/150

提交评论