由于老师要平衡同学们学习进度的原因,关于类与对象这节课我已经上过好几次了,但是每一次都能有新的收获。今天正式开班,老师将类与对象更细致的讲了一遍,在此我就说说我的收获。
老师问的第一个问题就是“什么是对象?”,我说了个“电子专业的学生”,刚说出来我就后悔了,因为我知道对象是具体的一个事件或者具体的某样东西。比如说“学生”就是一个类,“电子专业的学生”也是一个类,因为他们包括很多学生,我们不知道是哪一个,而“这个学生”就是一个对象,因为他是具体的一个人。
类是指某一个种类,而对象就是这个类里具体的一个事物。类的组成由三个部分组成:
1.属性
2.构造方法
3.普通方法(对象的行为,用途,功能)
基本格式为:
public class 类名 {
private 数据类型 属性名;
public 类名([数据类型 形参名,...]){
//代码
}
public 返回值类型 方法名([数据类型 形参名,...]){
//代码
}
}
创建对象要用到new关键字,具体方法为
类名 对象名 = new 类名();其后的“类名()”其实是类里的构造方法,可能你在类里看不到这个方法,这是因为Java里默认了一个构造方法,是空的。但是你可以重写构造方法,当然也可以在括号里传入参数,但这时创建对象时也要在括号里传入参数,否则会报错。如:
public class ATM(){
private String name; //定义这个类的姓名属性
//重写构造方法,传入字符串参数作为name
public ATM(String s){
name=s;
}
}
这时新建对象就要这么写
ATM atm=new ATM("奥特曼");//这样直接就新建了一个姓名为“奥特曼”的对象
需要注意的是构造方法的名称一定要与类名一样,格式为:
public 类名([数据类型 形参名,...]){
//代码
}
在编写代码过程中会遇到方法重载与重写的问题,一开始我也哟点分不清,后来搞懂了:
重载跟重写,是Java多态型的两种不同表现,重载是静态多态性,即同名不同参,不同类中方法名称相同但是传入参数不同,方法体也可以不同,好比一个人可以用不同的餐具。重写就是覆盖,动态多态性,同名又同参,方法体可以改变。
下面给出一个场景并介绍如何用代码实现的步骤:
场景:奥特曼和小怪兽进行PK,直到一方的血量为0时,结束战斗谁胜利!(可选攻击力)
1.找出场景中的对象:
奥特曼和小怪兽
2.找出对象的特征和行为:
奥特曼
特征:名字,血量,攻击力,防御力 行为:PK(小怪兽)
小怪兽
特征:名字,血量,攻击力,防御力 行为:PK(奥特曼)
3.根据对象,特征,行为和类的格式编写代码。
4.创建(实例化,实例)对象,调用方法。
创建对象的关键字:new
格式:
类名 对象名 = new 构造方法(实参,...);
ATM atm = new ATM("奥特曼");
Monster m = new Mosteer();
调用方法:
格式:
对象名.方法名(实参);
atm.setName("无名");
atm.pk(m);
下面给出奥特曼类的代码:
//创建一个奥特曼类,包括其name,blood,attack,defence基本属性
//还包括一个与角色类的pk方法
public class ATM {
//设置基本属性
private String name;//姓名
private int blood;//血量
private int attack;//攻击力
private int defence;//防御力
//构造方法
public ATM(String n,int blood,int attack,int defence){
name=n;
this.blood=blood;
this.attack=attack;
this.defence=defence;
}
//对于属性的set和get方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
public void setDefence(int d){
defence=d;
}
public int getDenfence(){
return defence;
}
//pk方法,首先判断奥特曼攻击力是否大于角色类防御力,如大于则造成伤害,否则无法对角色类造成伤害
//奥特曼的攻击力减去角色类的防御力等于怪奥特曼兽对角色类造成的伤害
//角色类原本的血量减去伤害值即为pk过后剩余血量,此时输出剩余血量
public void pk(Monster R){
if(attack>R.getDefence()){
R.setBlood(R.getBlood()-(attack-R.getDefence()));
System.out.println(name+"攻击了"+R.getName()+","+R.getName()+"剩余血量为:"+R.getBlood());
}else{
System.out.print(name+"打不过"+R.getName()+",无法对其造成伤害");
}
}
}
剩下的详细代码在我的第二篇博文“类的继承”中。