类和对象
一、开发平台
eclipse
java语言
二、
理论知识
1.类和对象
1)什么是类
生活中,具有相同特征和行为(功能)的对象
程序中,类是具有相同属性和方法的抽象的定义。属性是特征的抽象化,方法是行为(功能)的抽象化。
注意:比如手机,它不是一个对象,需要具体指出一个手机,比如这部手机,才是一个对象。
![](https://img-blog.csdn.net/20160427175808100?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20160427175818583?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如图,手机有很多种类,对象必须是具体指出的某一个
2)类的格式
public class 类名{
修饰符 数据类型 属性名;——属性
修饰符 返回值 方法名(数据类型 参数名)——方法
{}
}
1)什么是类
生活中,具有相同特征和行为(功能)的对象
程序中,类是具有相同属性和方法的抽象的定义。属性是特征的抽象化,方法是行为(功能)的抽象化。
注意:比如手机,它不是一个对象,需要具体指出一个手机,比如这部手机,才是一个对象。
如图,手机有很多种类,对象必须是具体指出的某一个
2)类的格式
public class 类名{
修饰符 数据类型 属性名;——属性
修饰符 返回值 方法名(数据类型 参数名)——方法
{}
}
3)类的组成:属性、方法。
属性是由对象的特征定义的
方法分为两类:1.普通方法 2.构造方法
普通方法是由对象的行为定义的。
4)实例化(在main主类中进行)
关键字是new
类名 对象名=new 类名();
5)调用属性和方法
对象名.属性;
对象名.方法(参数值);
2.构造方法与重载
方法分为两类:1.普通方法 2.构造方法
普通方法是由对象的行为定义的。
4)实例化(在main主类中进行)
关键字是new
类名 对象名=new 类名();
5)调用属性和方法
对象名.属性;
对象名.方法(参数值);
2.构造方法与重载
1)构造方法
格式
访问修饰符 构造方法名(数据类型 参数名,...){
}
注意:a.构造方法名必须要和类名完全一致;
b.构造方法不能定义返回值类型;
c.Java会默认提供一个无参数的构造方法
d.如果在类中定义了其他的构造方法,默认的构造方法就会被覆盖,无法再使用;此时只能使用自定义的构造方法。
2)构造方法的用途
实例化对象的格式:类名 对象名 = new 构造方法名(参数值,...);
a.用来实例化对象
2)构造方法的用途
实例化对象的格式:类名 对象名 = new 构造方法名(参数值,...);
a.用来实例化对象
b.可以给属性设置初始值.
3)构造方法和普通方法的区别
a.构造方法的名和类名一样,普通方法不一样
3)构造方法和普通方法的区别
a.构造方法的名和类名一样,普通方法不一样
b.构造方法没有返回值类型,而普通方法有
2.方法重载
1)用重载的情形
1)用重载的情形
同一个行为(动作),只是具体的参数不一样,比如说两个人都是买东西这个方法,但是两个人买的内容(参数)是不一样的。
2)重载的条件
a.方法名相同。
b.参数个数,类型,顺序至少有一个不同。
注意:普通方法和构造方法都能被重载
3.this关键字
a.用途
1)参数名和属性名一致,可以使用this来做区分(加上this的表示属性,没有加的则表示参数)
2)重载的条件
a.方法名相同。
b.参数个数,类型,顺序至少有一个不同。
注意:普通方法和构造方法都能被重载
3.this关键字
a.用途
1)参数名和属性名一致,可以使用this来做区分(加上this的表示属性,没有加的则表示参数)
(Java会采用就近原则,优先使用离其最近的参数)
2)
2)
this(参数值,...);调用对应参数的构造方法。
this.方法名(参数值,...);调用对应参数的普通方法。
b.this表示的内容
表示当前调用方法的对象。谁在调用方法,那么方法中的this就是谁。
this(参数值,...);表示对应对象的构造方法
比如Student stu1=new Student(){
stu1.study();}
this.方法名(参数值,...);调用对应参数的普通方法。
b.this表示的内容
表示当前调用方法的对象。谁在调用方法,那么方法中的this就是谁。
this(参数值,...);表示对应对象的构造方法
比如Student stu1=new Student(){
stu1.study();}
现在是stu1在调用,那么this就是指的stu1.
4.对象与值的内存分配
4.对象与值的内存分配
1)Student stu=new Student(……);stu存放在栈中,堆中存放stu对应的 student类中的属性和方法,栈存储堆的首地址,并指向堆。
三、应用举例
1.类和对象
情景:小明在写数学作业,当写完后,小明停止写数学作业。
分析:
对象:小明
特征:姓名,作业
行为:写(数学作业)
作业
特征:名字,数量
代码:
1)定义一个学生类
2)定义一个作业类
3)主类
情景:小明在写数学作业,当写完后,小明停止写数学作业。
分析:
对象:小明
特征:姓名,作业
行为:写(数学作业)
作业
特征:名字,数量
代码:
1)定义一个学生类
public class Student{
public String name;
public int score;
public void write(Homework a){
a.score--;
System.out.println(name+”正在写”+a.name+”作业,剩余作业量是”+a.score);
If(a.score==0){
System.out.println(name+”已经写完”+a.name+”作业”);
2)定义一个作业类
public class Homework{
public String name;
public int score;
3)主类
public class manager{
public static void main(String[] args){
Student stu=new Student();
stu.name=”小明”;
stu.score=3;
Homework h=new Homework();
h.score=4;
h.name=”数学”;
while(h.score>0){
stu.write(h);
}
2.构造与重载
情形: 奥特曼和小怪兽进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼胜利,则奥特曼和Boss进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼胜利,则奥特曼和Boss进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
1)定义奥特曼类
public class aoteman {
public String name;
public int blood;
public void pk(xiaoguaishou xgs){
xgs.blood--;
System.out.println(xgs.name+"剩余血量是"+xgs.blood);
if(xgs.blood==0)
System.out.println(name+"胜利了!");
}
public void pk(boss bo){
bo.blood--;
System.out.println(bo.name+"剩余血量是"+bo.blood);
if(bo.blood==0)
System.out.println(name+"胜利了!");
}
}
2)定义小怪兽类
public class xiaoguaishou {
public String name;
public int blood;
public void pk(aoteman atm){
atm.blood--;
System.out.println(atm.name+"剩余血量是"+atm.blood);
if(atm.blood==0)
System.out.println(name+"胜利了!");
}
}
3)定义boss类
public class boss {
public String name;
public int blood;
public void pk(aoteman atm){
atm.blood--;
System.out.println(name+"剩余血量是"+blood);
if(atm.blood==0)
System.out.println(name+"胜利了!");
}
}
4)定义总类
public class managei {
public static void main(String[] args) {
// TODO Auto-generated method stub
aoteman atm=new aoteman();
xiaoguaishou xgs=new xiaoguaishou();
boss bo=new boss();
atm.name="奥特曼";atm.blood=8;
xgs.name="小怪兽";xgs.blood=8;
bo.name="boss";bo.blood=8;
while(atm.blood>0&&xgs.blood>0){
atm.pk(xgs);
if(xgs.blood==0){
while(atm.blood>0&&bo.blood>0)
bo.pk(atm);
if(atm.blood==0);
break;
}
xgs.pk(atm);
if(atm.blood==0){
break;
}
}
}
}
四、结果截图
1。
.
2.
奥特曼和小怪兽进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼胜利,则奥特曼和Boss进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼胜利,则奥特曼和Boss进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!