面向对象
面向对象:是一种以对象为中心的编程思想,通过指挥对象实现具体功能。
面向过程:是一种以过程为中心的编程思想,实现功能的每一步都是自己实现的。
类:类是现实社会生活中具有共同属性和行为的事物的抽象。
对象:是能够看得到摸得着的真实存在的实体。
属性:该事物的各种特征。例如学生的属性:姓名、年龄、毕业院校....
行为:该事物存在的功能。例如学生事物的行为:学习,编程,唱歌,运动...
类的定义
类的组成:属性和行为
属性:在代码中通过成员变量来体现(类中方法外的变量)
行为:在代码中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
类的定义步骤:
- 定义类
- 编写类的成员变量
- 编写类的成员方法
封装
隐藏实现细节,仅仅对外暴露公共的访问方式
private关键字:是一个权限修饰符,可以用来修饰成员(变量、方法)
特点:只能在本类中进行访问,出了大括号就访问不了了
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
- 提供get变量名();方法,用于获取成员变量的值,方法用public修饰
- 提供set变量名(参数);方法,用于设置成员变量的值,方法用public修饰
当局部变量和成员变量如果出现重名问题,Java使用的是就近原则
this关键字:可以调用本类的成员(变量、方法)解决局部变量和成员变量重名问题。
this代表所在类的对象引用
- 记住,方法被哪个对象调用,this就代表哪个对象
构造方法
构建、创建对象的时候,所调用的方法
格式:
1、方法名和类名相同,大小也要一致
2、没有返回值类型,连void也没有
3、没有具体的返回值(不能由return带回结果数据)
执行时机
1.创建对象的时候调用,每创建一次对象,就会执行一次构造方法
2.不能手动调用构造方法
构造方法的作用:
用于给对象的数据(属性)进行初始化
注意事项:
- 构造方法的创建
- 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
- 如果定义了构造方法,系统将不再提供默认的构造方法
- 构造方法的重载
- 如果自定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法
- 推荐的使用方式
无论是否使用,都手动书写无参数构造方法,和带参数构造方法
面向对象进阶
static关键字
概述:static关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量
被static修饰的的成员变量,一般叫做静态变量
被static修饰的成员方法,一般叫做静态方法
被static修饰的特点:
被static修饰的成员,会被该类的所有对象所共享,是我们判断是否使用静态关键字的条件
被static的修饰的成员,会随着类的加载和加载,优先于对象的存在
对象需要类被加载后,才能创建
- 多了一种调用方式,可以通过类名.进行调用
也可以通过对象名调用
注意事项:
- 静态方法中,只能访问静态成员(成员变量,成员方法)
- 非静态方法中,可以使用静态方法也可以使用非静态方法
- 静态方法中,没有this关键字
继承
概述:让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有成员
继承的格式:子类名 extends 父类名
Fu:是父类,也称为基类,超类
Zi:是子类,也被称为派生类
继承的好处与弊端:
好处:
- 提高了代码的复用性
- 提高了代码的维护性
- 让类与类产生了关系,是多态的前提
弊端:
继承是侵入性的
降低了代码的灵活性
继承关系,导致子类必须拥有父类非私有属性和方法,让子类自由的世界多了些约束
- 增强了代码的耦合性
代码与代码之间存在关联都可以称之为耦合
使用场景:
当类与类之间,存在相同的内容,并且产生了 is a 的关系,就可以考虑使用继承,来优化代码
特点:
Java只支持单继承,不支持多继承,但是支持多层继承
继承的成员变量访问特点:
this:代表本类对象的引用
super:代表父类存储空间标识(可以理解为父类对象引用)
继承中成员方法的访问特点:
通过子类对象访问一个方法:
- 子类成员范围找
- 父类成员范围找
方法重写:
- 在继承体系中,子类出现了和父类一模一样的方法声明
应用场景:
当子类需要父类的功能,而功能主体子类有自己特有的功能,可以重写父类中的方法,这样既沿袭了父类中的功能,又定义了子类特有功能
注意事项:
父类中私有方法不能被重写
父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写
静态方法不能够被重写
权限修饰符: