版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大学计算机专业JAVA选修课第四章抽象封装和类第1页,共93页。4.1抽象和封装所有编程语言都提供“抽象”功能。你所能解决问题的复杂程度取决于抽象的种类和质量。汇编语言对于计算机(机器语言)是一步很小的抽象。过程化语言(高级语言)对于汇编语言的抽象迈了一大步。但你所考虑的仍然是机器的结构而非问题的结构。面向对象方法为程序员提供了一种表示问题空间元素的全新的方法,而且不受问题类型的约束。第2页,共93页。抽象问题空间元素→方法空间中的表示:对象“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示。
面向对象的程序设计是以要解决的问题中所涉及到的各种对象为主要考虑因素。面向对象语言更加贴近人的思维方式。OOP允许你用问题空间中的术语来描述问题。在面向对象程序设计中还需要一些其他对象,而它们没有在问题空间的对应体。第3页,共93页。对象“对象”就象是一台小“计算机”:对象有状态对象有你要求它执行的操作现实世界中的对象:它们都有自己的状态它们又都有自己的行为程序中的对象用属性表示状态用方法(代码)实现行为第4页,共93页。对象与过程考虑对象—考虑过程:前者更有意义设计对象—设计过程:前者更富挑战性,尤其是设计可重用的对象。面向对象的程序设计和问题求解力求符合人们日常自然的思维习惯,降低分解问题的难度和复杂性,提高整个求解过程的可控制性、可监测性和可维护性,从而达到以较小的代价和较高的效率获得较满意效果的目的。第5页,共93页。封装-信息隐藏“封装”是一种组织软件的方法。其基本思想是把客观世界中联系紧密的元素及相关操作组织在一起,使其相互关系隐藏在内部,而对外仅仅表现为与其他封装体间的接口。从而构造出具有独立含义的软件实现。封装并不是一个新的概念,但在面向对象的程序设计中提出了一种全新的封装方法-类第6页,共93页。封装-信息隐藏每个类里都封装了相关的数据和操作。在实际的开发过程中,类多用来构建系统内部的模块。由于封装特性把类内的数据保护得很严密,模块与模块间仅通过严格控制的界面进行交互,使它们之间耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。
第7页,共93页。封装-软件复用封装使得对象:对内成为一个结构完整、可自我管理、自我平衡、高度集中的整体。对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的有机的单元。类的封装特性使得类可重用性大为提高,这样的有机单元特别适宜构建大型标准化的应用软件系统,可以大幅度地提高生产效率。
第8页,共93页。4.2Java的类系统定义的类:类库,包使用方式:继承创建系统类对象直接使用系统类:使用户可见:
用户自定义类创建对象与定义构造函数第9页,共93页。用户自定义类Java中类包括成员变量和成员方法两部分。类的成员变量可以是基本数据类型的数据或数组,也可以是一个类的实例;类的方法用于处理该类的数据。
1.类的定义格式:[类的修饰字]class类名称[extends父类名称][implements接口名称列表]{变量定义及初始化;方法定义及方法体;}类体第10页,共93页。类的修饰字:[public|default(可缺省,非公开类)][abstract|final]public:允许其他类(没有限制)访问本类,一个源文件仅可以有一个public类,且与文件同名。default(缺省):可被当前包中的其他类访问;如果定义时没有public,则所有的类都是friendly;abstract:没有实例的抽象概念类final:不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类每个类都拥有自己的名字空间,即指类及其方法和变量可以在一定的范围内知道彼此的存在,可以使用。父类继承声明:extends父类名(见继承)实现接口(interface):implements接口名关于类定义的说明第11页,共93页。类定义中属性及方法功能属性-对象的数据描述描述每个类对象的状态;同一个类的不同对象主要是用属性值来区分;方法-对象的功能体现围绕对象的属性进行各种操作;与其他类或对象进行数据交换;类定义中对象的应用在类定义中,属性也可以是另一个类的对象;在方法定义中,方法的参数可以是一个对象类型;第12页,共93页。类定义—属性说明定义Employee类classEmployee{Stringname;intage;floatsalary;}创建一个Employee类的对象(职工对象)Employeee1=newEmployee();=“张立”;
e1.age=21;e1.salary=528.37F;final类型常量名=值实例变量—成员变量其生命周期与对象存在的时间相同。第13页,共93页。类定义—方法说明为Employee类增加打印方法——将数据和代码封装在一个单一的实体中。classEmployee{Stringname;intage;floatsalary;voidprint(){年龄为:"+age+
"月薪为:"+salary);
}//print()方法
}//class第14页,共93页。对象方法的含义Employeeemp=newEmployee();="张立";
emp.age=21;
emp.salary=528.37F;一旦对象被建立并被初始化,就可以调用该方法打印这个对象的数据。
emp.print();对象emp执行print方法操作自己的数据;而不是从外部操作对象的数据。向对象发消息,让对象做某件事。4-1第15页,共93页。对象的几个特征Everythingisanobject原则上说,你可以将所要解决的问题中的任何一个“概念组件”在程序中表示为一个对象。对象类似一个记录,可以存储数据,但你还可以让它执行某些操作(作用在它自身的数据上)。Aprogramisabunchofobjectstellingeachotherwhattodobysendingmessages所谓对一个对象发信息,就是调用该对象的一个方法。Everyobjecthasatype每一个对象都是某个类的一个实例。对象+消息第16页,共93页。信息隐藏-封装属性的访问权限privatepublic默认(相当于package}使用private修饰符修饰属性后,就不能从对象的外部直访问这些属性(类内方法可以访问),而只能通过该类的方法来操作这些属性。私有属性—公有方法方法可以保护数据(做各种合法性检查)。使得代码可维护性好(代码可变,接口不变)第17页,共93页。信息隐藏-封装(电梯例)电梯类定义(没有体现封装的类定义)classBadElevator{publicbooleandoorOpen=false;//表示电梯门的状态
publicintfloor=1;//表示电梯停靠层数
publicfinalintTOP_FLOOR=5;//定义电梯最髙层
publicfinalintBOTTOM_FLOOR=1;//定义电梯最低层}第18页,共93页。信息隐藏-封装(电梯例)对象自身没有保护,这样操作会产生很多误动作4-2第19页,共93页。信息隐藏-封装(电梯例)电梯类定义(体现封装的类定义)publicclassElevator{privatebooleandoorOpen=false;//门的开关状态
privateintfloor=1;//电梯停靠层数
privateintweight=0;//表示当前乘客总重量
finalintCAPACITY=1000;//电梯乘客重量上限
finalintTOP_FLOOR=5;//电梯最高停靠层数
finalintBOTTOM_FLOOR=1;//电梯最低停靠层数
//以下是方法定义
publicvoidopenDoor(){//开门方法
doorOpen=true;//通过公共方法操作私有属性
}
属性定义4-3第20页,共93页。信息隐藏-封装(电梯例)publicvoidcloseDoor(){//关门方法,关门时检查是否超重
checkWeightSensors();//调用测试重量的方法
if(weight<=CAPACITY)//如果没有超重
doorOpen=false;//关门
else//如果超重,则不关门,且通过响声提示
for(intcounter=0;counter<10;counter++)码7为beep
}
privatevoidcheckWeightSensors(){//检查超重的方法(内部方法)
weight=(int)(Math.random()*1500);//通过随机数模拟乘客重量乘客重量是:"+weight);//显示乘客重量
}
第21页,共93页。信息隐藏-封装(电梯例)publicvoidgoUp(){//上升一层的方法定义
if(!doorOpen){if(floor<TOP_FLOOR){floor++;//如果门已关、且没到顶层,才能上升。显示到达层数
}else已在顶层");
}
else
门没关!");
}
方法体现对内部属性的保护第22页,共93页。信息隐藏-封装(电梯例)publicvoidgoDown(){//下降一层的方法定义
if(!doorOpen){if(floor>BOTTOM_FLOOR){floor--;//如果门已关、且没到低层,才能下降。
}else已在底层");
}
else
门没关!");
}
第23页,共93页。信息隐藏-封装(电梯例)publicvoidsetFloor(intgoal){//指定停靠层的方法定义
if(goal>=BOTTOM_FLOOR&&goal<=TOP_FLOOR){while(floor!=goal){if(floor<goal)goUp();elsegoDown();}当前停靠层是:"+floor);
}
}
publicintgetFloor(){returnfloor;}//取当前停靠层方法
publicbooleanisOpen(){returndoorOpen;}//判断开门方法
}//endofclassElevator
第24页,共93页。信息隐藏-封装(电梯例)通过接口,对电梯的任何操作都不会导致误动作。第25页,共93页。e2.openDoor();e2.goDown();e2.closeDoor();e2.goDown();e2.goDown();intcurFloor=e2.getFloor();if(curFloor!=5&&!e2.isOpen())e2.setFloor(5);e2.openDoor();e2.closeDoor();e2.setFloor(10);测试结束");
}}信息隐藏-封装(电梯例)4-3第26页,共93页。构造方法实例化对象-初始化对象类名对象引用名=new构造方法();例:Employeeemp=newEmployee(…);new运算符的参数就是调用类的构造方法,初始化新建的对象。new运算符为对象分配内存空间,并返回对该对象的一个引用。构造方法特殊性:名字必须是类的名字。构造方法没有返回类型说明。当在类的定义中,没有定义任何构造方法时,系统会为该类配一个隐含的构造方法(如:Employee()),方法中没有内容。一旦定义了一个构造方法,隐含构造方法失效!一般不能显式地直接调用第27页,共93页。定义构造方法例
classEmployee{Stringname;intage;floatsalary;Employee(Stringn,inta,floats){name=n;if(a>=18&&a<=60)age=a;else{年龄不在正确范围内");
System.exit(1);
}
salary=s;
}
}构造方法定义第28页,共93页。定义构造方法例4-8第29页,共93页。4.3类的修饰符访问控制符非访问控制符AbstractFinal第30页,共93页。抽象类与抽象方法abstract修饰符-定义一个抽象类抽象类是没有具体对象的概念类,不能创建抽象类的对象;是类继承中处于较高层次的类,是对子类共性的抽象与定义;抽象类的作用是让其子类来继承它所定义的属性及方法,以避免各子类重复定义这些相同的内容;程序员可以先建立抽象类(定义子类共有的属性及方法),再从一般类派生出具有特性的子类。abstract修饰符-定义一个抽象方法抽象方法是仅有方法头而没有方法体的方法;为该类的子类定义一个方法的接口标准,方法的具体实现在子类中完成。第31页,共93页。抽象类与抽象方法抽象类经常包含某些抽象方法,即规定一些方法的接口,而方法的代码要由不同的子类去实现。一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体。抽象类中可以定义一般方法和抽象方法,但抽象方法只能出现在抽象类中。抽象类一般类抽象方法
X一般方法
第32页,共93页。最终类用final修饰符定义的类-最终类final类不能被继承,final类不能再有子类;在类的继承树中,final类只能是树的叶子结点;当然,叶子结点不一定是final类。类的保护性措施当通过类名引用类的对象时,实际引用的既可以是该类的对象本身,也可以是这个类的子类的对象,即有一定的不确定性;将一个类定义为final类,可以杜绝其子类的产生,将该类的属性及方法固定下来,类的内容与类的引用形成稳定的映射关系。
final类通常是定义那些有固定功能、用来完成某种标准功能的类。第33页,共93页。最终方法用final修饰符定义的方法-最终方法不能被当前类的子类重新定义的方法。子类不能再重新定义与此方法同名的自己的方法,而仅能使用从父类继承来的方法。只能继承但不能修改。固定了这个方法所对应的具体操作,可以防止子类对父类关键方法的错误的重定义,保证了程序的安全性和正确性。方法的保护性措施。第34页,共93页。类继承树Objectclassabstractclass
classfinalclassclassjava采用单重继承机制,即每个类只有一个父类第35页,共93页。抽象类例抽象类交通工具自行车汽车空中交通工具海上交通工具陆地交通工具客机运输机第36页,共93页。抽象类与最终类抽象类最终类PersonEngineerSecretaryCustomerEmployssVipCustManagerDirector5-5第37页,共93页。抽象类、抽象方法、最终类、最终方法例
finalgetName()abstractgetInfo()
namesexPerson抽象类
finalgetName()
getInfo()
custnonamesexCustomer类
finalgetName()
getInfo()
staticc_vnovipnocustnonamesexVipCust最终类
finalgetName()
finalupSalary(inc)getInfo()
staticc_minSalarynamesexagesalaryEmployee类第38页,共93页。
finalgetName()
finalupSalary(inc)getInfo()
staticc_minSalarynamesexagesalarytitleEngineer最终类
finalgetName()finalupSalary(inc)getInfo()
staticc_minSalarynamesexagesalaryofficeSecretary最终类Employee类抽象类、抽象方法、最终类、最终方法例第39页,共93页。
finalgetName()
finalupSalary(inc)finalupSalary(inc1,inc2)getInfo()
staticc_minSalarynamesexagesalary
allowanceManager类Employee类
finalgetName()
finalupSalary(inc)finalupSalary(inc1,inc2)getInfo()setTel()getTel()
staticc_minSalarynamesexagesalary
allowancetelephonedepartmentDirector最终类方法重载抽象类、抽象方法、最终类、最终方法例第40页,共93页。例题代码abstractclassPeople{//人员类-抽象类
Stringname;charsex;
abstractStringgetInfo();//抽象方法,子类要实现
finalStringgetName(){//最终方法,只能继承,不能修改
returnname;}}第41页,共93页。例题代码classCustomerextendsPeople{//客户类
Stringcustno;Customer(Stringc,Stringn,charx){custno=c;//客户号
name=n;//姓名
sex=x;//性别
}StringgetInfo(){//通过方法覆盖,实现父类的抽象方法
return"客户号:"+custno+"姓名:"+name+
"性别:"+sex;
}}//Cuetomer第42页,共93页。例题代码finalclassVipCustextendsCustomer{//vip客户-最终类
staticintc_vno=0;//静态属性,用于生成客户对象的vip号
intvipno;//vip号
VipCust(Stringc,Stringn,charx){super(c,n,x);vipno=++c_vno;}StringgetInfo(){//通过方法覆盖,改写方法
return"vip客户:"+"vip编号:"+vipno+
"姓名:"+name;
}}第43页,共93页。例题代码classEmployeeextendsPeople{staticfloatc_minSalary=500;//静态属性(职工最低工资)
intage;floatsalary;Employee(Stringn,charx,inta,floats){name=n;sex=x;age=a;if(s<c_minSalary)salary=c_minSalary;elsesalary=s;}voidupSalary(floatinc){//定义新方法
salary=salary+inc;}StringgetInfo(){//通过方法覆盖,实现父类的抽象方法
return"姓名:"+name+"性别:"+sex+"年龄:"+age;
}}第44页,共93页。例题代码classManagerextendsEmployee{floatallowance;Manager(Stringn,charx,inta,floats,floataa){super(n,x,a,s);allowance=aa;//津贴
}finalvoidupSalary(floatinc1,floatinc2){//最终方法,方法重载
salary=salary+inc1;allowance=allowance+inc2;}StringgetInfo(){//改写父类Employee的方法
return"管理者"+super.getInfo()+
"收入:"+(salary+allowance);
}}//Manager第45页,共93页。例题代码finalclassDirectorextendsManager{//最终类
Stringtelephone;Stringdepartment;Director(Stringn,charx,inta,floats,floataa,Stringt,Stringd){super(n,x,a,s,aa);telephone=t;department=d;}voidsetTel(Stringtel){telephone=tel;}StringgetTel(){returntelephone;}StringgetInfo(){returnname+"是"+department+"部门的领导";
}}//Director第46页,共93页。例题代码finalclassEngineerextendsEmployee{//最终类
Stringtitle;Engineer(Stringn,charx,inta,floats,Stringt){super(n,x,a,s);title=t;}StringgetInfo(){returnname+"职称是"+title;
}}//Engineer第47页,共93页。例题代码finalclassSecretaryextendsEmployee{//最终类
Stringoffice;Secretary(Stringn,charx,inta,floats,Stringo){super(n,x,a,s);office=o;}StringgetInfo(){returnname+"是"+office+"的秘书";
}}//Secretary第48页,共93页。例题代码第49页,共93页。例题代码测试职工-----------");
Employeeemp=newEmployee("赵兵",'男',28,1500.0F);
Managermgr=newManager("徐军",'女',35,1800.0F,500.0F);
Directordir=newDirector("黄帅",'男',45,3000.0F,
500.0F,"2430","计划司");
Engineereng=newEngineer("刘志军",'男',38,1600.0F,
"工程师");
Secretarysec=newSecretary("邓萍",'女',23,1000.0F,
"财务室");
的名字是:"+emp.getName());
emp.upSalary(500.0F);
第50页,共93页。例题代码mgr.upSalary(200.0F,200.0F);dir.setTel("8888");的姓名:"+dir.getName()+
"dir的电话:"+dir.getTel());
}}5-5第51页,共93页。代码说明方法覆盖-抽象方法的实现People类抽象了一个其子类共有的方法:
abstractStringgetInfo();这个方法代表相同的功能(获取对象信息),但对于不同类型的对象,显示内容是不同的。不同的子类可以重新定义该方法,实现不同内容的信息显示。但是所有的类中,凡是实现获取信息的方法,尽管内容不同,却共享相同的名字-getInfo()由于同名的不同方法是属于不同的类,所以只需在调用方法时指明是哪个类对象即可区分(对象名.方法名)第52页,共93页。代码说明若Customer类修改代码如下:classCustomerextendsPeople{Stringcustno;Customer(Stringc,Stringn,charx){custno=c;name=n;sex=x;}StringgetName(){return"客户姓名:"+name;}}//Cuetomer抽象方法在非抽象类中必须实现!最终方法不能重新定义(覆盖)!第53页,共93页。代码说明如果将Customer定义成最终类(final),编译错误如下:最终类不能被继承,即不能有子类!第54页,共93页。4.4域域的定义静态域静态初始化域最终域第55页,共93页。域是类和对象的静态属性,它可以是基本数据类型的变量,也可以是其他类(系统类或用户自定义类)的对象。域也可以拥有若干修饰符,包括访问控制符和非访问控制符。本节讨论域的非访问控制符。第56页,共93页。静态属性(类属性)static-静态修饰符,可以修饰类中的属性与方法静态属性(类属性)被static修饰的属性;是类的属性,不属于任何一个类的具体对象;位于类的内存区域中,是该类对象共享的存储单元;无static修饰的属性为对象属性。静态属性的访问类名.属性名或:对象名.属性名访问的是相同的内存单元第57页,共93页。静态属性例classEmployee{//Employee类定义
Stringname;intage;floatsalary;staticfloatc_minSalary=500;//静态属性,职工最低工资
Employee(Stringn,inta,floats){//构造方法
name=n;age=a;salary=s;}voidupSalary(floatinc){//方法-提薪
salary=salary+inc;}StringgetInfo(){//方法-取信息
return"姓名:"+name+"年龄:"+age+"工资:"+salary;
}}第58页,共93页。静态属性例
Employee类c_minSalary:500
emp1对象name:赵兵age:28salary:1500
emp2对象name:何小明age:31salary:18005-1第59页,共93页。静态属性例可实现各实例之间的通讯。例:跟踪创建的实例数classEmployee{//Employee类定义Stringname;intage;floatsalary;staticfloatc_minSalary=800.0F;//静态属性,职工最低工资staticintc_count=0;//静态属性,创建对象记数器Employee(Stringn,inta,floats){//构造方法name=n;age=a;if(s<c_minSalary)salary=c_minSalary;elsesalary=s;第60页,共93页。静态属性例5-2第61页,共93页。系统类的静态属性例第62页,共93页。类的初始化-静态初始化器由关键字static引导的一对大括号括起的语句组,用来完成类的初始化的工作。与构造方法的区别:构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化;构造方法是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用执行;不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。第63页,共93页。静态初始化器例classEmployee{//Employee类定义
Stringname;intage;floatsalary;staticfloatc_minSalary;//静态属性,职工最低工资
staticintc_count;//静态属性,创建对象记数器
static{//静态初始化器,初始化两个静态属性
c_minSalary=800;c_count=0;}Employee(Stringn,inta,floats){//构造方法
name=n;age=a;if(s<c_minSalary)salary=c_minSalary;elsesalary=s;c_count++;//创建一个Employee对象,计数器计数一次
}}//测试程序略第64页,共93页。最终属性用final修饰符定义的属性-最终属性final属性的值不能被修改,相当于一个常量;final属性要指定数据类型及其取值由于所有类对象的final属性值都一样,为节省空间,final属性通常又被同时声明为static(静态属性)。例:staticfinalintc_minSalary=800;而:staticintc_minSalary=800是定义静态属性,但可以修改。第65页,共93页。4.5方法方法定义抽象方法(见前部分)静态方法其他方法第66页,共93页。类方法的定义规则方法名后的小括号是方法的标志。形式参数是方法从调用它的环境输入的数据。返回值是方法在操作完成后返还给调用它的环境的数据。要指定方法返回值类型。如没有返回值,类型要写void例:publicbooleanisOpen(){returndoorOpen;}返回布尔值方法名相同、但参数不同,是不同的方法。与类名相同的所有方法都是类的构造方法。[修饰符]返回类型方法名([参数列表])[throws例外]
{方法定义}见后面的解释第67页,共93页。方法体的定义在方法中定义的变量称为局部变量。生命周期:执行进入方法体时建立,退出方法时撤消。局部变量使用之前必须初始化。在方法体中可以访问所有的类属性,可以调用所有类中定义的方法。publicvoidcloseDoor(){//关门方法,关门时检查是否超重
checkWeightSensors();//调用类中定义的方法
if(weight<=CAPACITY)//访问类属性
doorOpen=false;//访问类属性(为类属性赋值)
else//如果超重,则不关门,且通过响声提示
for(intcounter=0;counter<10;counter++)码7为beep
}第68页,共93页。方法的参数方法的参数要有名有型,参数的作用域在本方法中在方法体中,可以象属性及方法体内定义的变量那样使用参数。方法的参数采用值传送publicvoidsetFloor(intgoal){//指定停靠层的方法定义
if(goal>=BOTTOM_FLOOR&&goal<=TOP_FLOOR){while(floor!=goal){//goal是参数,floor是属性
if(floor<goal)goUp();elsegoDown();}当前停靠层是:"+floor);
}}
第69页,共93页。不同数据类型参数的值传送含义基本类型值传送3.143.14AB引用类型值传送0x2F0x2FAB第70页,共93页。参数传送例classPar{voidm1(intpi){pi=100;}voidm2(StringBufferps){ps=ps.append("--Shanghai");}voidm3(Employeepe){pe.age=100;}}//classParclassEmployee{Stringname;intage;floatsalary;}//classEmployee第71页,共93页。参数传送例第72页,共93页。参数传送例4-4第73页,共93页。参数传送例(数组作为参数)主类main方法中和ay1对象方法中操作的是同一个数组。第74页,共93页。参数传送例(数组作为参数)classAry{int[]m_ary;//定义一个数组做为Ary类的属性
Ary(int[]p){//构造函数
m_ary=p;}voidprint(){//打印数组方法
for(inti=0;i<m_ary.length;i++)}第75页,共93页。参数传送例(数组作为参数)
voidorder(){//数组排序方法(数组下标从0开始)
intp1,p2,temp;p2=m_ary.length-1;while(p2>0){for(p1=0;p1<p2;p1++)if(m_ary[p1]>m_ary[p1+1]){temp=m_ary[p1];m_ary[p1]=m_ary[p1+1];m_ary[p1+1]=temp;}p2=p2-1;}//while}//order}//classAry4-5第76页,共93页。对象作为方法的参数classDepartment{intm_dno;//部门号
Stringm_dname;//部门名称
intm_num;//部门员工数
Directorm_dir;//部门主管
Department(intdno,Stringdname,intnum,Directord){m_dno=dno;m_dname=dname;m_num=num;m_dir=d;}intgetDno(){returnm_dno;}第77页,共93页。对象作为方法的参数
booleansetDno(intnewDno){if(newDno>0){m_dno=newDno;returntrue;}elsereturnfalse;}booleanisSameDept(Departmentd){//比较两个对象
if(m_dno==d.getDno())returntrue;elsereturnfalse;}}//classDepartment第78页,共93页。对象作为方法的参数4-12第79页,共93页。静态方法(类方法)static-静态修饰符,可以修饰类中的属性与方法。静态方法被static修饰的方法;使用类方法不用创建类的对象。调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名。非static的方法是对象方法(或称实例方法)。类方法中不能访问实例属性,而只能访问类属性(static属性)、自己的方法参数及定义的变量。类方法中不能直接调用本类中的实例方法,但可以调用其他的static方法。类方法中没有this值。静态方法的调用类名.方法名第80页,共93页。静态方法(类方法)例5-3第81页,共93页。静态方法(类方法)main方法是静态方法,这是为了系统在没有任何实例化对象之前可以运行一个应用程序。如果m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年武汉市医疗救治中心医护人员招聘考试参考试题及答案详解
- 2026年江西省中医院医护人员招聘考试参考试题及答案详解
- 2026年武汉市普仁医院医护人员招聘考试备考试题及答案详解
- 2026年益阳市第一中医医院医护人员招聘笔试参考试题及答案详解
- 2026年徐州市中医院医护人员招聘考试参考题库及答案详解
- 2026年梧州市人民医院医护人员招聘笔试参考试题及答案详解
- 2026年上海市精神卫生中心医护人员招聘笔试备考试题及答案详解
- 2026年中国人民解放军总医院第六医学中心医护人员招聘考试参考题库及答案详解
- 2026年淮安市妇幼保健院医护人员招聘笔试备考题库及答案详解
- 2026年无锡市第三人民医院医护人员招聘笔试备考题库及答案详解
- 2026年西南大学版(新教材)小学数学一年级下册下册期末质量检测卷及答案(2套)
- 西安交通大学2026年强基计划笔试模拟试题及答案解析
- 2026石河子泽众水务有限公司部分岗位社会招聘37人笔试备考试题及答案解析
- 2026浙江省知识产权保护中心工作人员招聘6人备考题库及一套完整答案详解
- 2026年安全月:如何全面排查整治风险隐患专题培训
- 2026文言100个高考文言出错率达90%的实词速记+文言翻译的“8大规律”
- 2025上海崇明区区管企业核心岗位招聘笔试历年参考题库附带答案详解
- AQ3062-2025《精细化工企业安全管理规范》专项检查表
- 2025-2030中国即食海蜇加工市场消费前景及投资风险分析报告
- 2025版PADIS指南更新解读
- 幕墙员工工作制度及流程
评论
0/150
提交评论