面向对象

类

定义

类:对现实世界中事物的抽象。Student

对象:现实世界中具体的个体。张三、李四 这些具体的学生

面向对象的特征:抽象、封装、继承、多态

OOP: Object Oriented Programming 面向对象编程

类和对象的总结:

1、现实世界都是由很多对象组成的,基于对象的共同特征抽象出类。

2、对象:真实存在的对象

3、类中包含:

​ 1)所有对象所共有的特征–属性(静)

​ 2)所有对象所共有的行为–方法(动)

4、类是对象的模板,对象是类的具体实例。

5、一个类可以创建多个对象, 同一个类的不同对象,结构相同,数据不同。

面向对象 vs 面向过程

面向过程

面向过程以过程为中心,强调的是一步步完成任务,是流水线式的思维。

比如:把大象装进冰箱

  1. 打开冰箱门
  2. 把大象赶进去
  3. 关上冰箱门

面向过程是:函数(方法)一步步调用,顺序执行。

面向对象

面向对象以对象为中心,强调的是找对象来完成任务。

同样:把大象装进冰箱

  • 对象:冰箱、大象
  • 冰箱有行为:开门、关门
  • 大象有行为:走进来
  • 交互:冰箱开门 → 大象走进 → 冰箱关门

面向对象是:对象有自己的属性和行为,对象之间交互完成任务。

对比总结:

面向过程 面向对象
以过程为中心,强调步骤 以对象为中心,强调交互
适合简单任务,功能单一 适合复杂任务,易于维护扩展
代码复用性差 代码复用性好
不容易应对需求变化 更容易应对需求变化

现实世界复杂,都是由多个对象组成,所以面向对象更符合现实世界的思维方式,适合开发大型软件。

对象、引用、栈和堆

初学者容易把“变量”和“对象”混在一起。Java 中对象通常创建在堆内存中,局部变量保存的是对象引用。

Person p1 = new Person("张三", 20);
Person p2 = p1;
p2.setName("李四");
System.out.println(p1.getName()); // 李四

上面代码中,p1 和 p2 是两个引用变量,但它们指向同一个对象,所以通过 p2 修改对象后,p1 看到的也是修改后的状态。

flowchart LR
    subgraph 栈内存
        p1[p1 引用]
        p2[p2 引用]
    end
    subgraph 堆内存
        obj[Person 对象
name=李四, age=20]
    end
    p1 --> obj
    p2 --> obj

1. 堆:new出来对象放在堆里面
2. 栈:变量(引用)放在栈里面,存储的是对象的地址值
3. 方法区:存放加载的类的信息

封装

面向对象的封装是一种编程概念和原则,它通过将数据和操作封装在一个对象中,以实现信息隐藏和安全性。

封装使得对象的内部细节对外部不可见,只暴露必要的接口供其他对象进行交互。

Java 提供四个访问修饰符控制访问权限:

修饰符 本类 同包 不同包子类 任意位置
private ✅ ❌ ❌ ❌
default ✅ ✅ ❌ ❌
protected ✅ ✅ ✅ ❌
public ✅ ✅ ✅ ✅
  • private:私有,只能在本类中访问
  • default:包访问权限,只能在本包中访问
  • protected:本包 + 不同包子类可以访问
  • public:公开,任何地方都能访问

构造方法

构造方法是new对象时候调用方法,特点:

  1. 方法名和类名一样
  2. 没有返回值
  3. 在new对象的时候会调用构造方法

//无参构造方法
//如果不写,Java默认提供这样一个无参构造方法.
//如果你写了任何一个构造方法,Java就不会再提供这个无参构造方法
public Student() {
   System.out.println("Student.Student()");
}

//有参构造方法
public Student(int id, String name, int age, String gender) {
   this.id = id;//把1这个值赋值给当前new出来的student对象的id属性
   this.name = name;
   this.age = age;
   this.gender = gender;
}

Student student = new Student(2, "李四", 24, "男");
System.out.println(student);

1. 如果不写任何构造方法,系统默认提供一个无参数构造方法,只是我们看不到而已。

2. 如果自己写了任何一个构造方法,不管有参没参,系统就不会提供这个默认无参构造方法。

3. 自己写了一个带参数的构造方法,就要把无参数构造方法也要写上。

4. new 对象 new的就是这个构造方法

上一篇
下一篇