Java 面向对象
程序是为了模拟现实世界,解决现实问题,而使用计算机语言编写的一系列指令的集合。
对象
一切客观存在的事物都是对象,万物皆对象。
任何对象一定具有自己的特征和行为。
- 特征:称为属性,一般是名词,代表对象都有什么。
- 行为:称为方法,一般是动词,代表对象能做什么。
程序中的对象
-
程序是如何模拟现实世界
- 现实中的对象程序中也应该具有。
- 程序中必须具有与现实相同的对象,用以模拟。
- 使用程序中的对象代替现实中的对象,执行解决问题。
-
现实与程序
- 现实中对象来自模板,通过模板可以造实体,继而称为现实中的对象。
- 程序中对象来自模板(类),通过类可以造对象,实体就是程序中的对象。
类与对象的关系
类:定义了对象具有的特征和行为,类是对象的模板。
对象:拥有多个特征和行为的实体,对象是类的实体。
实例变量与局部变量的区别
| 局部变量 | 实例变量 | |
|---|---|---|
| 定义位置 | 方法或方法内的结构中 | 类的内部,方法的外部 |
| 默认值 | 无默认值 | 字面值(与数组相同) |
| 使用范围 | 从定义行到包含其结构结束 | 本类有效 |
| 命名冲突 | 不允许与局部变量重名 | 不允许与实例变量重名,可与局部变量重名,局部变量优先 |
方法重载
重载(overload):一个类中定义了多个相同名称的方法。
要求
- 方法名相同。
- 参数列表不同(类型、个数、顺序)。
- 与访问修饰符和返回值类型无关。
调用
调用带有重载方法时,需要根据传入实参找到与之匹配的方法。
好处:灵活、方便,屏蔽使用差异。
public class Calculate {
public int add(int num1, int numb2) {
return num1 + numb2;
}
public double add(double num1, double num2) {
return num1 + num2;
}
public int add(int num1, int num2, int num3) {
return num1 + num2 + num3;
}
public double add(int num1, double num2) {
return num1 + num2;
}
public double add(double num1, int num2) {
return num1 + num2;
}
}
构造方法
类中的特殊方法,主要用于创建对象。
特点:
- 名称与类完全相同。
- 没有返回值类型。
- 创建对象时,触发构造方法调用。
注意
- 如果类中没有显示定义构造方法,则编译器默认提供无参构造方法。
- 如果已经手动添加了带参数的构造器,则编译器不再默认提供无参构造方法,可根据需求自行添加。(建议添加)
public class Teacher {
String name;
String sex;
double salary;
int age;
public Teacher() {
}
public Teacher(String name) {
this.name = name;
}
public Teacher(String name, String sex) {
this.name = name;
this.sex = sex;
}
public Teacher(String name, String sex, double salary) {
this.name = name;
this.sex = sex;
this.salary = salary;
}
public Teacher(String name, String sex, double salary, int age) {
this.name = name;
this.sex = sex;
this.salary = salary;
this.age = age;
}
}
this 关键字
this 指当前实例,即模板中当前对象,模板服务于哪个对象,this 指向哪个对象。
用法:
- 调用实例属性、实例方法。
this.namethis.show() - 调用本类中的其他构造方法。this()必须写在构造方法的首行
既然 this 指的是当前实例,说明在程序中直接打印 this 时是一个引用。事实也的确如此。