国庆节10月1日
--


嘿,你有没有想过,为什么我们写代码时总爱说“这个对象有名字、会叫、还能抓老鼠”,而不是一上来就堆满变量和函数?其实啊,面向对象就像给程序世界安了个“人设系统”——类是剧本,对象是演员,属性是人设细节,方法是ta的招牌动作。今天咱们不啃概念,就聊透它怎么让代码更像人话、更经得起折腾。
类 (Class) :
对象 (Object) / 实例 (Instance) :
关系:类是对象的抽象,对象是类的实例。必须先有类,才能创建对象。

创建流程:Cat cat1 = new Cat();
概念:属性是类的一个组成部分,表示对象的状态或数据。成员变量 = 属性 = 字段 (field)。
定义语法:访问修饰符 属性类型 属性名; (如 public String name;)
注意事项:
1Person p1 = new Person();2p1.age = 10;3Person p2 = p1; // p2 指向 p1 所指向的同一个对象4System.out.println(p2.age); // 105p2.age = 20;6System.out.println(p1.age); // 20 (因为指向同一对象)对象不仅有属性(状态),还有行为(功能)。方法用于封装对象的行为。
好处:
原理(重要!):

1访问修饰符 返回数据类型 方法名(形参列表) {2 // 方法体3 语句;4 return 返回值; // 如果返回类型不是void5}1public void swap(int a, int b) { // a, b 是实参值的拷贝2 int tmp = a; a = b; b = tmp; // 交换只发生在方法内部3}4// main: swap(x, y); 调用后 x, y 不变1public void test100(int[] arr) { arr[0] = 200; } // 修改会影响原数组2public void test200(Person p) { p.age = 10000; } // 修改会影响原对象概念:方法自己调用自己,每次调用传入不同的变量。
能解决的问题:数学问题(阶乘、斐波那契数列)、迷宫、汉诺塔、八皇后、各种算法(快排、二分查找)等。
重要规则:

概念:在同一个类中,允许存在多个同名方法,但要求它们的形参列表不一致(类型、个数、顺序至少有一项不同)。
好处:减轻起名和记名的麻烦。
细节:
判断:void show(int a, char b, double c) {}
概念:将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。
语法:访问修饰符 返回类型 方法名(数据类型… 形参名) {}
细节:
1public int sum(int... nums) { // nums 可当作数组使用2 int res = 0;3 for(int i = 0; i < nums.length; i++) { res += nums[i]; }4 return res;5}在创建对象时,直接完成对象的初始化(为属性赋初值),而不是先创建空对象再赋值。
构造器是类的一种特殊方法,主要作用是完成新对象的初始化。
特点:
语法:[修饰符] 方法名(形参列表) { 方法体; }
当构造器或方法的形参名与属性名相同时,为了区分局部变量和属性,需要使用this。
1class Dog {2 String name;3 public Dog(String name) { // 形参名与属性名相同4 this.name = name; // this.name 指当前对象的属性,name 指形参5 }6}用于控制类、属性和方法的访问权限范围。
| 访问级别 | 修饰符 | 同类 | 同包 | 子类 | 不同包 | 说明 |
|---|---|---|---|---|---|---|
| 公开 | public | ✓ | ✓ | ✓ | ✓ | 对外完全公开 |
| 受保护 | protected | ✓ | ✓ | ✓ | ✗ | 对子类和同包类公开 |
| 默认 | (无,即default) | ✓ | ✓ | ✗ | ✗ | 仅对同包的类公开 |
| 私有 | private | ✓ | ✗ | ✗ | ✗ | 仅本类内部可访问 |
注意事项:
理解:将数据和操作数据的方法封装在一起,对外隐藏实现细节。
好处:
解决多个类中存在相同属性和方法时的代码复用问题。
访问权限:子类继承了父类所有的属性和方法。但私有(private)成员不能在子类直接访问,需要通过父类提供的公共方法间接访问。
构造器调用:
单继承机制:Java中,一个子类最多只能直接继承一个父类(单继承)。
Object类:Java中所有类都默认继承Object类。
super关键字:代表父类的引用,用于访问父类的属性、方法和构造器。
继承的内存布局:子类对象在堆中包含了父类所有属性的空间。属性查找顺序:子类 -> 父类 -> … -> Object。
| 区别点 | this | super |
|---|---|---|
| 访问属性 | 从本类开始查找 | 从父类开始查找 |
| 调用方法 | 从本类开始查找 | 从父类开始查找 |
| 调用构造器 | 调用本类构造器 (this(…)) | 调用父类构造器 (super(…)) |
| 特殊 | 表示当前对象 | 在子类中访问父类对象 |
注意:super(…)和this(…)都必须放在构造器第一行,因此二者不能共存于同一个构造器中。
概念:方法或对象具有多种形态。建立在封装和继承的基础之上。
体现:
重要规则:
1Animal animal = new Dog(); // animal编译类型Animal,运行类型Dog2animal = new Cat(); // animal运行类型变为Cat,编译类型仍是Animal向上转型:
向下转型:
instanceof比较操作符:用于判断对象的运行类型是否为XX类型或其子类型。对象 instanceof 类名
子类有一个方法,和父类的某个方法的名称、返回类型、参数列表完全一样,我们就说子类的这个方法重写 (覆盖) 了父类的方法。
| 名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
|---|---|---|---|---|---|
| 重载 (Overload) | 本类 | 必须相同 | 必须不同 | 无要求 | 无要求 |
| 重写 (Override) | 父子类 | 必须相同 | 必须相同 | 相同或其子类 | 不能缩小访问范围 |
Object类是Java所有类的根父类。
== 操作符:
equals 方法:
作用:逐行执行代码,查看变量变化,追踪程序执行流程,排查错误。
IDEA 常用调试快捷键:
如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


