7.2类与对象

逻辑对应关系

类的成员变量 → 对象状态

类的成员函数 → 对象行为

类的静态变量

类的静态函数

物理对应关系

物理上对象中保存了如下:

  • 对象的状态

注意:逻辑上,一个对象将持有对象的状态和行为(分别由类的成员变量和成员函数派生而来),但实例物理上,对象中只保存了对象的状态并未保存对象的行为,即并未copy一份成员函数的代码到对象中,对象只是调用了类的成员函数。为了区分哪个对象掉用了类的成员函数,java引入了携带对象身份信息this关键字(类比Python中的self关键字),通过this来区分哪个对象调用了类的成员函数。

物理上类中保存如下:

  • 类的成员变量

  • 类的成员函数

  • 类的静态变量

  • 类的静态函数

代码说明

对于如下的Employee类,类中包含了成员变量、成员函数、静态变量、静态函数

public class Employee{
    static List<Employee> allEmployees;
    String name;
    int salary;

    void doWork(){

    }

    void getPaid(BankEndPoint bank){

    }

    static void loadAllEmployees(){

    }
}

通过Employee类new 了2个对象EmployeeA和EmployeeB。对象中只保存了对象的状态,即name和salary,并未保存对象的行为,物理结构如下:

EmployeeA

  • name:John

  • salary:10000

EmployeeB

  • name:Marry

  • salary:20000

Employee类的代码

  • 静态变量

  • 静态函数

  • doWork()

  • getPaid()

类的静态变量,静态函数

  • 没有this引用,静态变量全局唯一一份

  • 普通函数可以引用静态变量、函数么?ok

  • 对象上可以引用静态变量、函数么?编译器警告

  • 静态函数可以引用普通成员变量、函数么?编译错误

Last updated

Was this helpful?