面向对象思想
什么是面向对象
面向过程:
强调的是过程。也就是完成功能的每一个步骤都需要自己亲力亲为面向对象:
强调的是对象。也就是让对象帮我们去完成功能
面向对象的好处
- 将复杂的事情简单化了
- 更符合人们思想习惯的思想(懒人思想)
- 将程序员由执行者变成了指挥者
类和对象
类和对象的概念
什么是类
是对现实世界 同一类 具有 共同属性和行为 的 事物的模拟.
例如:学生类
什么是对象
就是某一类事物的具体体现,是类的具体体现
例如:张三、李四、王五
属性和行为
属性:
事物的基本特征 例如:学生类:都有姓名,都有年龄行为:
事物可以做什么事情 例如:学生类:都会学习,都会吃饭
通过类创建对象,一个类可以创建多个对象
类和对象的关系
类是对象的抽象,而对象是类的具体实例
类的定义
属性用成员变量去表示
行为用成员方法去表示
成员变量:
定义在类中方法外的变量就是成员变量成员方法:
就是之前的方法去掉了static
示例
public class Student {
//属性:用成员变量表示
//所有成员变量都要加上private关键字
//作用:使属性私有化,其他类访问不到,只能被本类使用访问
/**
* 名字
*/
private String name;
/**
* 年龄
*/
private int age;
/**
* 体重
*/
private double weight;
/**
* 性别
*/
private String sex;
//行为:用成员方法表示(没有static关键字的方法)
/**
* 学习
*/
public void study() {
System.out.println("好好学习,天天向上");
}
/**
* 打游戏
*
* @param gameName 游戏名
*/
public void playGame(String gameName) {
System.out.println(name + "喜欢打" + gameName);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
创建对象并使用
创建对象的格式:
类名 对象名 = new 类名();
Student stu = new Student();
成员变量的使用格式:
对象名.成员变量名
sout(stu.name);
如果在本类中使用就可以直接写成员变量名
成员方法的使用格式:
对象名.成员方法名(参数);
示例(第一种赋值方式 不用)
public class TestStudent {
public static void main(String[] args) {
Student stu = new Student();
//属性赋值 对象名.属性名=????
//第一种给属性赋值的方式(不用)
stu.name="张三";
stu.sex="女";
stu.age=20;
stu.weight=180.0;
System.out.println(stu.name);
System.out.println(stu.age);
System.out.println(stu.sex);
System.out.println(stu.weight);
//方法调用 对象名.成员方法
stu.study();
stu.playGame("LOL");
}
示例(第二种赋值方式)
public class TestStudent {
public static void main(String[] args) {
Student stu = new Student();
//第二种给属性赋值的方式
stu.setName("张三");
stu.setAge(18);
stu.setSex("男");
stu.setWeight(180.0);
System.out.println(stu.getName());
System.out.println(stu.getAge());
System.out.println(stu.getSex());
System.out.println(stu.getWeight());
//方法调用 对象名.成员方法
stu.study();
stu.playGame("LOL");
}
}
一个类就是一个数据类型
public class String{
.......
}
public class Student{
}
一个类就是一个数据类型
成员变量和局部变量的区别
定义位置
成员变量:定义在类中方法外。作用于整个类中
局部变量:定义在方法内或方法的声明上。作用于方法里
在内存中的位置
成员变量:在堆内存中
局部变量:在栈内存中
生命周期
成员变量:随着对象的创建而创建。随着对象的消失而消失
局部变量:随着方法的调用而创建。随着方法的消失而消失
初始化值
成员变量:有默认初始化值
局部变量:没有默认初始化值。使用之前必须赋值
构造方法
构造方法的特点:
①类名和方法名相同
②没有返回值类型,连void都不能写
构造方法的调用格式:
new 类名(参数);
构造方法
本身的作用(即使构造方法中什么代码也不写)
就是用来创建对象的,
它还有一个非常重要的作用是进行类中成员变量的默认初始化
我们赋予其的作用
给成员变量进行赋值
注意事项:
①如果没有写构造方法,编译器会默认赠送一个无参构造,如果写了,它就不会赠送了
②构造方法也可以重载
构造器与set方法给属性赋值的区别:
构造器只能给属性赋值一次,set方法可以赋值多次
也只适用于参数不多的情况
示例(第三种赋值方式)
public class Fridge {
/**
* 颜色
*/
private String color;
/**
* 价格
*/
private double price;
/**
* 品牌
*/
private String brand;
/**
* 打开冰箱门
*/
public void openDoor() {
System.out.println("打开门");
}
/**
* 放置
* @param name 放置的东西
*/
public void put(String name) {
System.out.println("把" + name + "放进冰箱");
}
/**
* 关上冰箱门
*/
public void closeDoor() {
System.out.println("关上门");
}
public Fridge(){
}
public Fridge(String color, double price, String brand) {
this.color = color;
this.price = price;
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
Fridge fridge1 = new Fridge("黑色", 2333, "小米");
fridge.put("饮料");
封装
就是将不想对外暴露的属性隐藏起来,对外提供一些方法供别人去操作,这样可以更安全,也可以提高代码的复用性
private
private
是一个修饰符,它可以用来修饰类中的成员变量或者成员方法,被它修饰的成员只能在本类中访问,不能在其他类中直接访问
如果想进行访问私有的成员,必须要提供一套get
和set
方法
this
this
可以用来区分局部变量和成员变量同名的问题
this代表什么呢?
代表当前对象的引用。谁来调用这个方法,this
就代表谁
public void setName(String name){
this.name = name;
}