Day 5 面向对象
面向对象思想
程序是为了模拟现实世界,解决现实问题而使用计算机语言编写指令集合。
一切客观存在的事物都是对象。万物皆对象
任何对象,一定具有自己的属性(特征)和方法(行为)。
类是对象的模板,对象是类的实例
类:定义了对象应具有的特征和行为,类是对象的模板。
对象:拥有多个特征和行为的实体,对象是类的实例。
类的定义
属性:通过变量0表示,又称实例变量。
语法:数据类型 属性名;
位置:类的内部,方法的外部。
方法:通过函数表示,又称实例方法。
语法:
public 返回值类型 方法名(形参){
//方法的主体
}
实例变量
实例变量不赋值时有默认值
实例变量类型 | 默认值 |
---|---|
整数 | 0 |
小数 | 0.0 |
字符 | \u0000(空格) |
布尔 | false |
其他 | null |
实例变量与局部变量的区别
局部变量 | 成员变量 |
---|---|
定义位置 | 方法或方法内的结构当中 |
默认值 | 无默认值 |
使用范围 | 从定义行到包含其结构结束 |
命名冲突 | 不允许重名 |
实例方法
方法的声明:
代表对象能做什么。
组成:修饰符 返回值类型 方法名(形参列表)
方法的实现:
代表对象怎么做,即如何实现对应的功能。
组成:{ }
方法重载
方法重载概念
在一些情况下,对象的同一种行为可能存在多种实现过程。
重载:一个类中定义多个相同名称的方法。
要求: 方法名称相同。
参数列表不同(类型、个数、顺序)。
与访问修饰符、返回值类型无关。
调用带有重载的方法是,需要根据传入的实参去找到与之匹配的方法。
好处:屏蔽使用差异,灵活、方便。
构造方法
类中的特殊方法,主要用于创建对象。
特点: 名称与类名完全相同。
没有返回值类型。
创建对象时,触发构造方法的调用,不可通过句点手动调用。
注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造函数。
对象创建过程
new Student() 触发对象创建(即会调用构造方法)
1、内存中开辟对象空间
2、为各个属性赋予初始值
3、执行构造方法中的代码
4、将对象的地址赋值给变量
对象的内存分配
存储对象的变量中保存对象的地址,通过变量中的地址访问对象的属性和方法。
构造方法重载
构造方法也可以重载,遵循重载规则。
创建对象时,根据传入参数,匹配对应的构造方法。
默认构造方法
在类中,如果没有显示定义构造方法,则编译器默认提供无参构造方法。
如已手动添加有参构造方法,则无参构造方法不再默认提供,可根据需求自行添加。
综上,为了避免忘记写无参构造函数,故无参构造函数全部显示书写。
this关键字
类是模板,可服务于此类的所有对象;
this是类中的默认引用,代表当前实例;
当类服务于某个对象时,this则指向这个对象。
this的第一种用法:
调用实例属性、实例方法。如:this.name、this.sayHi();
this的第二种用法:
调用本类中的其他构造方法。如:this()、this(实参)
加注:
在调用实例变量时,如果实例变量不与其它任何变量重名时,this . 前缀隐式存在。但若有重名时,局部变量优先,this . 前缀不再隐式存在,需显示书写来来调用实例变量。