分类思想
分类思想:分工协作,专人干专事
分包思想
包:本质上就是文件夹
创建包:单级包、多级包,多级包之间使用“.”进行分割,多级包的定义规范:个人域名或公司网站地址翻转(去掉www)
包的命名规则:字母都是小写
包的定义
使用package关键字定义包
格式:package包名;如果是多级包,中间用"."进行分割
package com.itheima;
注意:一般情况下,我们不会手动的去给某一个类定义包,使用IDEA开发工具创建即可
包的注意事项
package语句必须是程序的第一条可执行的代码
package语句在一个java文件中只能有一个
如果没有package,默认表示无包名
类与类之间的访问
同一个包下的访问
不需要导包,直接使用即可
不同包下的访问
1、import导包后访问
2、通过全类名(包名+类名)访问
应用场景:多个包下,出现了相同的类名称,就可以使用这种访问进行区分
注意:import、package、class三个关键字的摆放位置存在顺序关系
package必须是程序的第一条可执行的代码
import需要写在package下面
class需要在import下面
static 关键字
static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量
被static修饰的成员变量,一般叫做静态变量
被static修饰的成员方法,一般叫做静态方法
static修饰的特点
1、被static 修饰的成员,会被该类的所有对象所[共享]
2、被static修饰的成员,会随着类的加载而加载,优先于对象存在
3、多了一种调用方式,可以通过 [类名 . ] 进行调用
注意事项:
1、静态方法只能访问静态的成员
2、非静态方法可以访问静态的成员,也可以访问非静态的成员
3、静态方法中是没有this关键字
继承
继承:让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员
继承的格式:
格式:public class 子类名 extends 父类名{}
范例:public class Zi extends Fu{}
Fu:是父类,也被称为基类、超类
Zi:是子类,也被称为派生类
继承的好处和比弊端
继承的好处:
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
继承的弊端:
继承是侵入性的
降低了代码的灵活性
继承关系,导致子类必须拥有父类非私有属性和方法,让子类自由的世界中多了些约束
增强了代码的耦合性
代码与代码之间存在关联都可以将其称之为 “耦合”。
耦合性:代码与代码之间存在关联都可以将其称之为“耦合”
继承的特点
java只支持单继承,不支持多继承,但支持多层继承
单继承:子类只能继承一个父类
不支持多继承:子类不能同时继承多个父类
多层继承:子类A继承父类B,父类B可以继承父类C
继承的成员变量访问特点
super 关键字的用法和this关键字的用法相似
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象引用)
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
---|---|---|---|
this | this.成员变量 访问本类成员变量 | this.成员方法(...)访问本类成员方法 | this(...)访问本类构造方法 |
super | super.成员变量 访问父类成员变量 | super.成员方法(...) 访问父类成员方法 | super(...) 访问父类构造方法 |
继承的成员方法访问特点
通过子类对象访问一个方法
子类成员范围找
父类成员范围找
方法重写
方法重写概述
在继承体系中,子类出现了和父类中一模一样的方法声明
方法重写的应用场景
当子类需要父类的功能,而功能主体子类有自己特有内容,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容
方法重写注意事项
父类中私有方法不能被重写
父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写
注意:静态方法不能被重写!如果子类中,也存在一个方法声明一模一样的方法,可以理解为,子类将父类中同名的方法,隐藏了起来,并非是方法重写!™
子类重写父类方法时,访问权限必须大于等于父类
权限修饰符
修饰符 | 同一个类中 | 同一个包中子类无关类 | 不同包的子类 | 不同包的无关类 |
---|---|---|---|---|
private | ✔ | |||
默认 | ✔ | ✔ | ||
protected | ✔ | ✔ | ✔ | |
public | ✔ | ✔ | ✔ | ✔ |
继承中构造方法的访问特点
子类中所有的构造方法默认都会访问父类中无参的构造方法
子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
子类初始化之前,一定要先完成父类初始化
构造方法的第一条语句默认都是:super();
注意:如果我们编写的类,没有手动指定父类,系统也会自动继承Object(java继承体系中的最顶层父类)
如果父类中没有空参构造方法,只有带参构造方法
子类通过super,手动调用父类的带参的构造ff
子类通过this去调用本类的其他构造方法,本类其他构造方法再通过super去手动调用父类的带参的构造方法
只注意:this(...)super(...)必须放在构造方法的第一条有效语句,并且二者不能共存。