Java基础(六)——面向对象基础
一、对象
1、什么是对象
现实中的对象:
2、什么是类
类,这个类是指某一类事物,这一类事物肯定有某种或某些共同的特征,让你一眼看到就知道它是某一类事物。
比如看到一个四脚生物,你一眼看到就知道这是狗,而不是猫,不是蜘蛛,更不是人;所以称这一类生物是狗。
3、类的定义
4、类与对象的关系
5、对象的创建和赋值、取值、调用方法
这里以学生举例子。创建学生这个类:
public class Student {
String name;
int number;
int englishResults; // 英语成绩
int chineseResults; // 语文成绩
int mathResults; // 数学成绩
public int average(){
return (englishResults+mathResults+chineseResults)/3;
}
这样学生这个类就创建好了,姓名、学号、三科成绩,以及求平均成绩这个方法。
怎么创建一个个学生这些对象呢?
Student stu1 = new Student(); // 创建了学生1.也叫实例化对象
接着,可以为实例化后的对象赋值:
stu1.name = "张三";
stu1.number = 1;
stu1.englishResults = 80;
如果要调用方法,或者取得英语成绩,则通过 对象 . 方法()/ 属性 来调用:
System.out.println(stu1.englishResults);
System.out.println(stu1.average());
6、封装
但是这里会有一个问题,学生的成绩可以随意设置,比如设置一个负数,或者设置很大的整数,这些当然都是不对的,那么解决的方法就有:赋值前做判断,但是每次创建对象赋值都要判断,明显不可取;也可以在类里面创建方法,方法里面做判断,通过方法来设置成绩,但是用户依然可以直接调用属性的方式来赋值,也不可取,所以就有了封装。
a、私有化属性以及get、set方法
为了不让外部随意调用里面的属性,可以对其属性进行私有化,通过 private 关键字:
private int englishResults; // 私有化英语成绩
private int chineseResults; // 私有化语文成绩
private int mathResults; // 私有化数学成绩
这样就能私有化属性,外部调用则会报错。
私有化属性后,外部不能随便调用,但是怎么设置该属性以及获取属性呢?
当私有化以后,虽然外部不能调用,但是内部可以调用,java就提供了get、set方法,顾名思义,get是获取,set是设置。
而且设置成绩有要求,不能是负数,所以在设置 set 方法里面可以进行一些列的判断:
public void setEnglishResults(int a){ // 设置英语成绩,需要接收值,无需返回值
if (a<0){
System.out.println("英语分数有误,罚你0分");
englishResults = 0;
}else {
englishResults = a;
}
}
使用 set 方法需要接收值,但是不用返回值,所以方法时 void 类型的。
接着就是取出数据的 get 方法:
public int getEnglishResults(){ // 有返回值,所以方法要注意类型
return englishResults;
}
get 方法有返回值,所以这里是 int 类型的方法。
当设置好以后,就可以通过外部调用方法,来为私有化的属性赋值:
stu1.setEnglishResults(60); // 赋值
System.out.println(stu1.getEnglishResults()); // 取值
b、封装总结
属性的封装:使数据更合理化:
- 属性私有化(private)
- 提供 get()/set() 方法进行取值和赋值
set():给属性进行赋值——有参数,没有返回值
get():获取对象的属性值——没有参数,有返回值