类和对象总结

6月25日26日总结(类和对象):
这两天讲了类和对象,知识点挺多,包括对象的概念、类的组成和基本格式、实例化对象和调用方法的格式、构造方法、方法重载、this关键字、值传递和引用传递。
1、对象的概念:对象必须是具体的某一个物体或者具体的某一个事物。
比如说,桌子上放着的这台黑色电脑。但是如果就说 电脑 不能作为一个对象,因为他不是具体的事物。
对象有特征,即事物的属性,比如上面说的桌子上放着的这台黑色电脑中黑色就是该电脑的特征。当然,特征不止包括颜色,只要是物体的属性都能作为特征。对象也有功能、用途、或者行为,比如说电脑可以用来玩游戏,那被用来玩游戏就是电脑的一个用途,在类中我们称之为方法。
2、类的组成和基本格式
程序中的类由两部分组成:1、属性 2、方法
他的基本格式为:
public class 类名 {
private 数据类型 属性名;

public 返回值数据类型 方法名(数据类型 参数名,...){
//方法体
}
}
比如说:小王如果加一次班,则薪水加50,如果不加班,则薪水不加。

在这个场景中,对象是小王,特征是他的姓名和薪水,行为是加班。
在上述场景中,可写出一下的类:
//创建一个Worker类
public class Worker{ //public class 类名

//定义一个String类型,参数名为name
private String name; //private 数据类型 属性名;

//定义一个int类型,参数名为wage
ptivate int wage; //private 数据类型 属性名;

//设置属性值name的方法
public void setName(String n){
name = n;
}
//返回属性值name的方法
public String getName(){
return name;
}
//设置属性值wage的方法
public void setWage(int w){
wage = w;
}
//返回属性值wage的方法
public int getWage(){
return wage;
}

//定义一个加班方法
public void jiaban(){
wage = wage + 50;
System.out.println(name+"加班了一次班,他的薪水加了50,此时的薪水为"+wage);
}
}

3、实例化对象和调用方法的格式
实例化对象的关键字是:new
调用方法的格式:
类名 对象名 = new 类名();

调用方法和属性的格式:
对象名.方法名(参数值,...);
对象名.属性;
例如:
//创建一个类
public class Manager{

//函数入口
public static void main(Strings[] args){

//定义一个worker类型,参数名为wo
Worker wo = new Worker();

//设置名字
wo.setName("小王");

//设置薪水
wo.setWate("3000");

//小王加了一次班,调用一次jiaban()方法
wo.jiaban();
}
}
4、构造方法
构造方法和普通方法是java里面的两类方法,普通方法表示的是对象的行为,比如说上述的jiaban()是用来表示对象的加班行为,而构造方法是用来实例化对象的,比如说上面的类中的Worker wo = new Worker();就是用来实例化一个worker对象。构造方法和普通方法的区别有三点1.名字不同;2.返回值类型不同;3.用途不同。构造方法的用途有1、实例化对象;2、给属性设置初始值。
其中需要注意的是:当类中未定义构造方法时,那么Java会给类提供一个默认的构造方法;我们在实例化对象的时候,使用的就是默认的提供的构造方法。当你定义构造方法后,默认的构造方法会被你定义的构造方法覆盖,无法再继续使用,只能使用你定义的方法。

5、方法重载
实现方法重载的条件的有两个:1、方法名字要相同;2、方法所带的参数个数,参数类型,参数顺序至少要有一个不同。
为什么构造方法要使用方法重载?举个例子,java.awt中有Checkbox类,它有5种构造方法,用于不同的情况1、Checkbox() 使用空字符串标签创建一个复选框。2、Checkbox(String label) 使用指定标签创建一个复选框。3、Checkbox(String label, boolean state) 使用指定标签创建一个复选框,并将它设置为指定状态……

6、this关键字
this关键字只能调用当前类中的属性和方法。他的用途是1.用来区分属性名和参数名(前提是属性名和参数名相同)2.调用构造方法。
this关键字表示当前调用方法的对象。
例如上述Worker类中setName()方法可以改成

public void setName(String name){
this.name = name;
}
7、值传递和引用传递
值传递适用于java的8个基本数据类型和String类型,它是将值传给一个参数。而不是将地址传递给一个参数。引用传递适用于引用类型,它是将地址传递。

这次的练习是使用构造方法、重载、this、值传递和引用传递编写一个回合制游戏:

//**战士和**Boss或者小怪进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了。
//定义一个boss类
public class boss{

//设置boss名字
private String name;

//设置血量
private int blood;

//设置姓名的方法
public void setName(String name){
this.name = name;
}
//获取姓名的方法
public String getName(){
return name;
}

//设置血量的方法
public void setBlood(int blood){
this.blood = blood;
}
//获取血量的方法
public int getBlood(){
return blood;
}

//与战士战斗的行为

public void fight(soldier so,monster mo){
so.setBlood(so.getBlood()-1);
System.out.println(so.getName()+"减了一滴血。");
System.out.println("此时,"+name+"的血量为"+blood+","+so.getName()+"的血量为"+so.getBlood()+","+mo.getName()+"的血量为"+2*mo.getBlood());
}
//与小怪战斗的行为
public void fight(monster mo,soldier so){
mo.setBlood(mo.getBlood()-1);
System.out.println(mo.getName()+"减了两滴血。");
System.out.println("此时,"+name+"的血量为"+blood+","+so.getName()+"的血量为"+so.getBlood()+","+mo.getName()+"的血量为"+2*mo.getBlood());
}
}

//**战士和**Boss或者小怪进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了。
//定义一个soldier类
public class soldier{

//设置soldier名字
private String name;

//设置血量
private int blood;

//设置姓名的方法
public void setName(String name){
this.name = name;
}
//获取姓名的方法
public String getName(){
return name;
}

//设置血量的方法
public void setBlood(int blood){
this.blood = blood;
}
//获取血量的方法
public int getBlood(){
return blood;
}

//与boss战斗的行为

public void fight(boss bo,monster mo){
bo.setBlood(bo.getBlood()-1);
System.out.println(bo.getName()+"减了一滴血。");
System.out.println("此时,"+name+"的血量为"+blood+","+bo.getName()+"的血量为"+bo.getBlood()+","+mo.getName()+"的血量为"+2*mo.getBlood());
}
//与小怪战斗的行为
public void fight(monster mo,boss bo){

mo.setBlood(mo.getBlood()-1);
System.out.println(mo.getName()+"减了两滴血。");
System.out.println("此时,"+name+"的血量为"+blood+","+bo.getName()+"的血量为"+bo.getBlood()+","+mo.getName()+"的血量为"+2*mo.getBlood());
}
}

//**战士和**Boss或者小怪进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了。
//定义一个monster类
public class monster{

//设置monster名字
private String name;

//设置血量
private int blood;

//设置姓名的方法
public void setName(String name){
this.name = name;
}
//获取姓名的方法
public String getName(){
return name;
}

//设置血量的方法
public void setBlood(int blood){
this.blood = blood;
}
//获取血量的方法
public int getBlood(){
return blood;
}

//与boss战斗的行为

public void fight(boss bo,soldier so){
bo.setBlood(bo.getBlood()-2);
System.out.println(bo.getName()+"减了两滴血。");
System.out.println("此时,"+name+"的血量为"+2*blood+","+bo.getName()+"的血量为"+bo.getBlood()+","+so.getName()+"的血量为"+so.getBlood());
}
//与战士战斗的行为
public void fight(soldier so,boss bo){
so.setBlood(so.getBlood()-2);
System.out.println(so.getName()+"减了两滴血。");
System.out.println("此时,"+name+"的血量为"+2*blood+","+bo.getName()+"的血量为"+bo.getBlood()+","+so.getName()+"的血量为"+so.getBlood());
}

}


//**战士和**Boss或者小怪进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了。
//定义一个game类
public class Game3{

//定义一个入口函数
public static void main(String [] args){
//设置战士的属性

int blood = 5;

soldier s = new soldier();

s.setName("Aboss");

s.setBlood(blood);

//设置boss的属性
boss b = new boss();

b.setName("B战士");

b.setBlood(blood);


//设置小怪的属性
monster m = new monster();

m.setName("小怪");

m.setBlood(3);

//设置第二只小怪的属性

monster m2 = new monster();

//将第一只小怪的属性赋给第二只
m2 = m; ;

//设置战斗
while(s.getBlood()!=0&&b.getBlood()!=0&&m.getBlood()!=0){

System.out.print(s.getName()+"打了"+b.getName()+"一下,");
s.fight(b,m);
if(b.getBlood()==0) break;
System.out.print(b.getName()+"打了"+m.getName()+"一下,");
b.fight(m,s);
if(2*m.getBlood()==0) break;
System.out.print(m.getName()+"打了"+s.getName()+"一下,");
m.fight(s,b);
if(s.getBlood()==0) break;
System.out.print(s.getName()+"打了"+m.getName()+"一下,");
s.fight(m,b);
if(2*m.getBlood()==0) break;
System.out.print(m.getName()+"打了"+b.getName()+"一下,");
m.fight(b,s);
if(b.getBlood()==0) break;
System.out.print(b.getName()+"打了"+s.getName()+"一下,");
b.fight(s,m);
if(s.getBlood()==0) break;

}

if(s.getBlood()==0) System.out.println(b.getName()+"和"+m.getName()+"胜利!");
if(b.getBlood()==0) System.out.println(s.getName()+"和"+m.getName()+"胜利!");
if(m.getBlood()==0) System.out.println(b.getName()+"和"+s.getName()+"胜利!");


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值