JAVA类和对象
1.如何理解类和对象,类和对象与生活有什么联系呢?
面向对象编程思想是来源于现实生活,面向对象编程就是代码来模拟现实生活中的场景。
1.1现实生活中什么时对象?
对象:在现实生活中只要是一个具体的物体或者一个具体的事物就是一个对象;
举例:某一个学生、某一个老师、某一台电脑、某一个人、…
注意:在这里注意限定词某一,若没有此限定词就变成了学生、老师、电脑、人,就脱离了对象的范畴了。
1.2现实生活中我们从哪些方面去描述对象?分别有些什么内容?
某一台电脑
特征:长度、宽度、厚度、品牌、电池、内存、CPU、键盘、显示屏、…
功能:显示、计算、存储、开机、关机、…
某一个人
特征:身高、体重、肤色、发色、职业、爱好、特长、姓名、性别、年龄、…
行为:走路、说话、眨眼睛、思考、呼吸、唱歌、跳舞、打篮球、学习、敲代码、…
2.生活中的类是怎么来的?生活中的类是具体的还是抽象的?
我们根据生活中对象相似的特征和相似的行为(功能、用途)来进行分类,生活中的类是抽象的。
2.1程序中的类是怎么样的呢?
程序中的类是根据生活中对象的特征和行为(类中属性和方法),按照程序中类的固定格式进行的抽象定义。
程序中的类是由两个部分组成:
(1)属性 属性是根据对象的特征进行定义的;
(2)方法 方法分为两类:
1.普通方法 根据对象的行为(功能、用途)进行定义的;
2.构造方法 作用:实例化对象
2.2普通方法和构造方法有什么不同呢?
普通方法与构造方法的区别是构造方法在创建后只能掉用一次,用来初始化数据,而普通方法在创建后可以调用多次。
3.类的基本格式
public class 类名 {
//定义属性的格式
访问修饰符 数据类型 属性名;
//定义构造方法的格式
访问修饰符 构造方法名(数据类型 参数名,…){
}
//定义普通方法的格式
访问修饰符 返回值数据类型 方法名(数据类型 参数名,…){
}
}
4.构造方法
注意:
1.构造方法名必须要和类名完全一致;
2.构造方法不能定义返回值数据类型;
3.Java默认会给类提供一个默认无参数的构造方法;如果你自定义了构造方法,则默认的构造方法会被覆盖,只能使用你自定义的构造方法。
用途:
1.实例化对象;
2.给属性赋值。(传递参数的作用)
5.方法重载
5.1什么情况需要使用方法重载?
普通方法:
如果生活中我们需要定义吃的行为,但是由于我们饭的种类的不同导致我们需要的物品也不同:
例如:
吃(筷子、木桶、米饭、菜)、吃(筷子、鸡、米饭、碗)、吃(面条)、…
同样为吃的行为,我们如何根据饭菜的种类对该行为进行区分呢?
需要用到方法重载
方法重载的条件:
1.方法名必须要完全一致;
2.方法的所带的参数个数、参数类型和参数位置至少要有一个不同。
注意:至少有一个不同,即只要有一个不同就可以了
5.2当进行了普通方法重载后,如何调用重载后的方法呢?
根据参数来进行方法的调用。
注:构造方法也能进行方法重载
6.实例化对象和调用属性方法的格式:
实例化对象的关键字:new
格式:
类名 对象名 = new 构造方法(参数值,…);
调用对象属性和方法的格式:
对象名.属性名
对象名.普通方法(参数值,…);
6.例题
1.请定义一个交通工具(Vehicle)的类,其中有:
⦁ 属性:速度(speed),体积(size)等
⦁ 方法:移动(move()),设置速度(setSpeed(int speed)),设置体积(setSize(int size))加速speedUp(),减速speedDown()等
在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变。
code:
public class Vehicle {
double speed; //速度属性
double size; //体积属性
public Vehicle(){ //构造方法
speed=1.0;
size=1.0;
}
public void move(){
//移动
}
public void setSpeed(int speed){
this.speed=speed; //设置速度
}
public void setSize(int size){
this.size=size;
} //设置体积
public void speedUp(){
speed=speed*2; //加速方法
}
public void speedDown(){
speed=speed-1; //减速方法
}
}
public class TestVehicle {
public static void main(String[] args) {
Vehicle v; //声明对象;
v=new Vehicle(); //为对象分配变量
System.out.println(“初速度为:”+v.speed);
v.speedUp();
System.out.println(“加速后速度为:”+v.speed);
v.speedDown();
System.out.println(“减速后速度为:”+v.speed);
}
}
2.Student.java
/*
- 需求:写一个学生类
- 学生事物:
-
属性:姓名,年龄。。。
-
成员方法: 学习 , 吃饭
- 成员变量:和我们前面学习谷偶读变量的定义是一样的
-
位置不同:类中 ,方法外
-
初始化值:不需要初始化值
- 成员方法:和我们前面学习过的方法的定义是一样的
-
去掉static关键字
*/
public class Student {
//成员变量(属性)
String name;
int age;
//成员方法要去掉static
public void eat() {
System.out.println("肚子饿了当然是要吃东西的,不管是人类还是动物");
}
public void study() {
System.out.println("学生本职就是要学习");
}
}
StudentDemo.java
/*
- Student是一个学生事物描述类,main方法不适合放在它里面
- 使用一个类,其实就是使用该类的成员(成员变量和成员方法)
- 而我们要想使用一个类的成员,就必须首先拥有该类的对象。
- 我们如何拥有一个类的对象呢?
-
创建对象就可以了
- 我们如何创建对象呢?
-
格式:类名 对象名=new 类名();
- 对象如何访问成员呢?
-
成员变量:对象名.变量名
-
成员方法:对象名.方法名()
*/
public class StudentDemo {
public static void main(String[] args) {
//使用Student.java文件
//使用Student类 其实就是使用该类的成员(成员变量和成员方法)
Student s=new Student();//创建一个学生类的对象s
System.out.println(“s:”+s);//s:com.itheima_02.Student@7f63425a
//直接输出成员变量值
System.out.println("姓名:"+s.name);//null
//直接输出成员变量值
System.out.println("年龄"+s.age);//0
System.out.println("---------");
//给成员变量赋值
s.name="有钱淫";
s.age=30;
//再次输出成员变量值
System.out.println("姓名:"+s.name);
//直接输出成员变量值
System.out.println("年龄"+s.age);
System.out.println("---------");
//调用成员方法
s.study();
s.eat();
}
}