java教材源代码第5章类和对象.docx
《java教材源代码第5章类和对象.docx》由会员分享,可在线阅读,更多相关《java教材源代码第5章类和对象.docx(18页珍藏版)》请在冰豆网上搜索。
java教材源代码第5章类和对象
第5章类和对象
【例5-1】定义“银行账户”类的构造方法,实现对银行账户属性变量的赋值操作。
Cust(StringnewName,intnewID,StringnewPWD,intnewMoney){
name=newName;
ID=newID;
PWD=newPWD;
money=newMoney;
}
5.2案例分析:
银行账户对象的创建
本例的代码如下:
classCust{
Stringname;
intID;
StringPWD;
intmoney;
Cust(StringnewName,intnewID,StringnewPWD,intnewmoney){
name=newName;
ID=newID;
PWD=newPWD;
money=newmoney;
}
voidgetMoney(intgetMoney){
money=money-getMoney;
}
voidsetMoney(intsaveMoney){
money=money+saveMoney;
}
voidsearch(){
System.out.println("用户姓名:
"+name);
System.out.println("用户账号:
"+ID);
System.out.println("账户余额:
"+money);
}
voidchangePWD(StringnewPWD){
PWD=newPWD;
}
}
classMainDemo{
publicstaticvoidmain(String[]args){
CustmyCust=newCust("Tom",100,"11111",10000);
myCust.setMoney(5000);
myCust.getMoney(3000);
myCust.changePWD("Tom");
myCust.search();
}
}
【例5-4】静态方法与实例方法的区别。
publicclassStaticDemo{
staticdoublepi=3.14;//静态变量,类变量
doublepix=3.14;//实例变量,对象变量
doublegetArea(){//实例方法
returnpi*3*3;//类变量,实例方法能用类变量
}
staticdoublegetArea1(){
returnpi*3*3;//类方法能用类变量
}
doublegetArea2(){
returnpix*3*3;//实例方法能用实例变量
}
//staticdoublegetArea3(){
//returnpix*3*3;//类方法不能用实例变量
//}
}
【例5-5】静态成员的加法运算。
classHasStatic{
privatestaticintx=100;
publicstaticvoidmain(Stringargs[]){
HasStatichs1=newHasStatic();
HasStatichs2=newHasStatic();
hs1.x++;
hs2.x++;
hs1.x++;
System.out.println("x="+x);
}
}
【例5-6】为Cust类写两个构造方法,一个构造方法利用this关键字调用有参构造方法,另一个为有参构造方法,参数分别为姓名,账号、密码及余额。
Cust(){
this("Tom",100,"12345",10000);
}
Cust(StringnewName,intnewID,StringnewPWD,intnewmoney){
name=newName;
ID=newID;
PWD=newPWD;
money=newmoney;
}
【例5-7】重载Cust类的构造方法,一个为无参构造方法实现成员变量的初始化,另一个为有参构造方法,实现形参到成员变量的赋值。
Cust(){
name="";
ID=0;
PWD="";
money=0;
}
Cust(StringnewName,intnewID,StringnewPWD,intnewmoney){
name=newName;
ID=newID;
PWD=newPWD;
money=newmoney;
}
5.5案例分析:
银行账户类构造方法的重载
本例的代码如下:
classCust{
Stringname;
intID;
StringPWD;
intmoney;
staticStringbankName="建设银行";
intselfNum=0;
staticintallNum=0;
Cust(){
name="";
ID=0;
PWD="";
money=0;
allNum++;
selfNum=allNum;
}
Cust(StringnewName,intnewID,StringnewPWD,intnewmoney){
name=newName;
ID=newID;
PWD=newPWD;
money=newmoney;
allNum++;
selfNum=allNum;
}
voidgetMoney(intgetMoney){
money=money-getMoney;
}
voidsetMoney(intsaveMoney){
money=money+saveMoney;
}
voidsearch(){
System.out.println("所属银行:
"+Cust.bankName);
System.out.println("您是本银行的"+allNum+"个顾客中的第"+
selfNum+"个顾客");
System.out.println("用户姓名:
"+name);
System.out.println("用户账号:
"+ID);
System.out.println("账户余额:
"+money);
}
voidchangePWD(StringnewPWD){
PWD=newPWD;
}
voidsetInfo(StringnewName,intnewID,StringnewPWD,intnewmoney){
name=newName;
ID=newID;
PWD=newPWD;
money=newmoney;
}
}
classDemo{
publicstaticvoidmain(String[]args){
Custst1=newCust("Tom",100,"11111",10000);
Custst2=newCust();
st1.setMoney(5000);
st1.getMoney(3000);
st1.changePWD("Tom");
st1.search();
st2.setInfo("Jerry",200,"22222",10000);
st2.setMoney(10000);
st2.getMoney(5000);
st2.changePWD("Jerry");
st2.search();
}
}
【例4-10】创建不同的包,并在包内创建不同的类,实现不同包间类的访问。
在lession3包中的主文件Lession3.java代码如下:
packagelession3;
//注意,我们使用了其他package的类,所以需要import进来
//注意:
路径必须为完整的路径
importlession3.otherpackage.PublicClassOtherPackage;
//public的类,可以被任何类在任何地方访问
//默认权限的类(也就是没写任何访问描述符的类)只能在当前package访问,不能被其他package的类访问
publicclassLession3{
publicstaticvoidmain(String[]args){
//调用同一package下的public访问权限类
System.out.println(newpublicClassSamePackage().toString());
//调用同一package下的默认访问权限类
System.out.println(newDefaultClassSamePackage().toString());
//调用不同package下的public访问权限类
System.out.println(newPublicClassOtherPackage().toString());
//调用不同package下的默认访问权限类
//System.out.println(newDefaultClassOtherPackage().toString());
}
}
在lession3包中PublicClassSamePackage.java代码如下:
packagelession3;
/**
*相同package的公开访问权限类
*/
publicclassPublicClassSamePackage{
publicStringtoString(){
return"相同package的公开类";
}
}
在lession3包中DefaultClassSamePackage.java代码如下:
packagelession3;
/**
*相同package的公开访问权限类
*/
publicclassPublicClassSamePackage{
publicStringtoString(){
return"相同package的公开类";
}
}
在lession3.otherpackage包中PublicClassOtherPackage.java代码如下:
packagelession3.otherpackage;
/**
*其他package的公开访问权限类
*/
publicclassPublicClassOtherPackage{
publicStringtoString(){
return"其他package的公开类";
}
}
在lession3.otherpackage包中DefaultClassOtherPackage.java代码如下:
packagelession3.otherpackage;
/**
*不同package的默认访问权限类。
*/
classDefaultClassOtherPackage{
publicStringtoString(){
return"不同package的默认类";
}
}
5.7案例分析:
简单的银行账户管理程序
本例的代码如下:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
classKB{
publicstaticStringscan(){
Stringstr="";
try{
BufferedReaderbuf=newBufferedReader(
newInputStreamReader(System.in));
str=buf.readLine();
}
catch(Exceptione){}
returnstr;
}
}
classCust{
privateStringname;
privateintID;
privateStringPWD;
privateintmoney;
staticStringbankName="建设银行";
privateintselfNum=0;
staticintallNum=0;
Cust(StringnewName,intnewID,StringnewPWD,intnewmoney){
name=newName;
ID=newID;
PWD=newPWD;
money=newmoney;
allNum++;
selfNum=allNum;
}
voidgetMoney(){
System.out.print("请输入要取出的金额:
");
intn=Integer.parseInt(KB.scan());
money=money-n;
}
voidsaveMoney(){
System.out.print("请输入要储蓄的金额:
");
intn=Integer.parseInt(KB.scan());
money=money+n;
}
voidsearch(){
System.out.println("所属银行:
"+Cust.bankName);
System.out.println("您是本银行"+allNum+"个顾客中的第"+
selfNum+"个顾客");
System.out.println("用户姓名:
"+name);
System.out.println("用户账号:
"+ID);
System.out.println("账户余额:
"+money);
}
voidchangePWD(){
System.out.print("请输入用户密码:
");
Stringp=KB.scan();
PWD=p;
}
intgetID(){
returnID;
}
}
classDemo{
publicstaticvoidmain(String[]args){
Custst=newCust("Tom",100,"12345",10000);
System.out.print("请输入您的ID:
");
intID=Integer.parseInt(KB.scan());
if(ID==st.getID()){
while(true){
System.out.print("1存款");
System.out.print("2取款");
System.out.print("3修改密码");
System.out.print("4查询");
System.out.print("5退出");
intn=Integer.parseInt(KB.scan());
switch(n){
case1:
st.saveMoney();break;
case2:
st.getMoney();break;
case3:
st.changePWD();break;
case4:
st.search();break;
case5:
System.exit
(1);
}
}
else{
System.out.print("您输入的ID错误!
");
}
}
}
对于案例代码修改如下:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
classKB{
//此部分代码与前述代码段相同
}
classCust{
//此部分代码与前述代码段相同
}
classDemo{
publicstaticvoidmain(String[]args){
Custst=newCust("Tom",100,"12345",10000);
System.out.print("请输入您的ID:
");
intID=Integer.parseInt(KB.scan());
if(ID==st.getID()){
run(ID);
}
else{
System.out.print("您输入的ID错误!
");
}
}
Staticvoidrun(Custst){
while(true){
System.out.print("1存款");
System.out.print("2取款");
System.out.print("3修改密码");
System.out.print("4查询");
System.out.print("5退出");
intn=Integer.parseInt(KB.scan());
switch(n){
case1:
st.saveMoney();break;
case2:
st.getMoney();break;
case3:
st.changePWD();break;
case4:
st.search();break;
case5:
System.exit
(1);
}
}
}
}
修改代码如下:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
classKB{
//此部分代码与前述代码段相同
}
classCust{
//此部分代码与前述代码段相同
//下述代码为菜单操作方法
voidrun(){
while(true){
System.out.print("1存款");
System.out.print("2取款");
System.out.print("3修改密码");
System.out.print("4查询");
System.out.print("5退出");
intn=Integer.parseInt(KB.scan());
switch(n){
case1:
st.saveMoney();break;
case2:
st.getMoney();break;
case3:
st.changePWD();break;
case4:
st.search();break;
case5:
System.exit
(1);
}
}
}
}
classDemo{
publicstaticvoidmain(String[]args){
Custst=newCust("Tom",100,"12345",10000);
System.out.print("请输入您的ID:
");
intID=Integer.parseInt(KB.scan());
if(ID==st.getID()){
st.run();
}
else{
System.out.print("您输入的ID错误!
");
}
}
}
引入对象数组存储四个银行账户的信息,修改代码如下:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
classKB{
//此部分代码与前述代码段相同
}
classCust{
//此部分代码与前述代码段相同
}
classDemo{
publicstaticvoidmain(String[]args){
Custst[]=newCust[4];
st[0]=newCust("Mike",1000,"111",111);
st[1]=newCust("Bob",2000,"222",222);
st[2]=newCust("cindy",3000,"333",333);
st[3]=newCust("ruby",4000,"444",444);
booleanflag=false;//用于判断是否是全法的账户
while(true){
System.out.println("请输入您的ID");
intID=Integer.parseInt(KB.scan());
for(inti=0;i<4;i++){
if(ID==st[i].ID){
flag=true;
}
}
if(flag){
st[i].run();
}
else{
System.out.println("您输入的账号不正确,请重新输入");
continue;
}
System.out.println("是否还有顾客,没有请按N");
Stringstr=KB.scan();
if(str.equals("N")||str.equals("n")){
break;
}
}
}
}