Java是一门完全面向对象的编程语言,面向对象即使用代码来模拟生活中的场景,其中类和对象是面向对象编程的基础核心。
首先我们要理解什么是现实生活中的类和对象。对象即为现实生活中的某个具体的物体或具体事物,如:某台电脑、某台手机、某个人等。而类则是根据对象相似的特征和相似的行为(功能/用途)进行分类,如:根据颜色、材质、显卡、CPU、内存等特征,计算、图像处理、开机、关机、运行软件等功能将该类事物划分为电脑。
弄明白现实生活中的类和对象之后,我们需要明白在程序中的类和对象怎样表示。程序中的类由两部分组成:属性和方法。属性根据对象的特征进行定义,方法根据对象的行为(功能/用途)进行定义。类在程序中的基本格式为:
public class 类名 {
//定义属性
public 数据类型 属性名;
//定义方法
public 返回值类型 方法名(数据类型 参数名,...){
}
}
这样通过定义属性和方法,就完成了一个类的定义。但需注意的是Java中的类只是模板(类是基本单位),我们如需调用其中的属性和方法就必须通过一个对象,实例化对象在程序中的格式为:
类名 对象名 = new 类名();
实例化一个对象后,我们就可以通过这个对象来调用该类的属性和方法,调用属性和方法的格式为:
对象名.属性名
对象名.方法名(参数值,...);
这样我们就完成了对类的定义及对对象的实例化,接下来就可以根据现实生活中的场景来进行编程了。
场景:张三在学习Java课程(10课时),学完该课程后,张三的学分要增加3分。
1.我们找出场景中的对象以及对象的特征和行为(功能/用途):
张三
特征:姓名、学分
行为:学习(Java课程)
Java课程
特征:学分、名字、课时
行为:被学习(如其他对象有主动行为,则该行为可忽略)
2.我们根据对象的特征和行为,将其抽象定义成类:
//定义Student学生类
public class Student {
public String name;//姓名属性
public int score;//学分属性
//定义学习课程的方法
public void study(Subject sub){
//减少课程的课时
sub.time--;
System.out.println(name+"正在学习"+sub.name+"课程,剩余的课时是"+sub.time);
//判断课程的课时是否学完
if(sub.time<=0){
//让学生的学分加上课程的学分
score+= sub.score;
System.out.println(name+"已经学完了"+sub.name+"课程,"+name+"现在的学分是"+score);
}
}
}
//定义Subject课程类
public class Subject {
public int score;//学分属性
public String name;//名字属性
public int time;//课时属性
}
3.定义主函数的类,在主函数中实例化对象,并通过调用属性和方法完成该场景的编程。
//定义主函数的类
public class Manager {
//定义程序的入口主函数
public static void main(String [] args){
//实例化Student学生类的对象
Student stu = new Student();
//设置学生对象的属性值
stu.name = "张三";
stu.score = 0;
//实例化Subject课程类的对象
Subject sub = new Subject();
//设置课程对象的属性值
sub.name = "Java";
sub.score = 3;
sub.time = 10;
//循环判断课程的课时是否还未学完
while(sub.time>0){
//让学生对象stu去学习课程对象sub
stu.study(sub);
}
}
}
最终输出:
张三正在学习Java课程,剩余的课时是9
张三正在学习Java课程,剩余的课时是8
张三正在学习Java课程,剩余的课时是7
张三正在学习Java课程,剩余的课时是6
张三正在学习Java课程,剩余的课时是5
张三正在学习Java课程,剩余的课时是4
张三正在学习Java课程,剩余的课时是3
张三正在学习Java课程,剩余的课时是2
张三正在学习Java课程,剩余的课时是1
张三正在学习Java课程,剩余的课时是0
张三已经学完了Java课程,张三现在的学分是3
这样,就通过定义类和对象完成了对该场景的编程。