包
:::info
- 建包的语法格式:package 公司域名倒写.技术名称。报名建议全部英文小写,且具备意义
- 相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!导包格式:import 包名.类名;
- 同包直接用,异包先导包,异包相同类,只能导一个,其他用全称
- 导包快捷键:alt+回车;
:::
权限修饰符
private -> 缺省 -> protected - > public
| 修饰符 | 同一 个类中 | 同一个包中 其他类 |
不同包下的 子类 |
不同包下的 无关类 |
|---|---|---|---|---|
| private | √ |
|
|
| | 缺省 | √ | √ |
|
| | protected | √ | √ | √ |
| | public | √ | √ | √ | √ |
:::success
private:成员变量
protected:本类+同一个包下其他类和子类访问。
public:方法
:::
final
作用:final关键字是最终的意思,可以修饰(方法、变量、类) :::success
- 修饰方法:表明该方法是最终方法,不能被重写。(无法方法重写)
- 修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次,有点像Const)
- 修饰类:表明该类是最终类,不能被继承。 ::: 注意:
- 若final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
- 若final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
final和const的区别
- const 具有传递性,当一个对象被定义为const时,它的子元素也不能修改。比如数组。final没有传递性。
- const必须赋初始值,之后不能改变该值;final不必赋初始值,第一次赋值之后才不能改变它的值。
常量
常量概述和基本作用
常量:使用public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。
public static final String SCHOOL_NAME=”UNIVERSITY”;
作用:用作系统的配置信息,方便程序的维护,同时也能提高可读性,实现软编码形式。
常量命名规范:英文单词全部大写,多个单词下划线连接起来。
执行原理:
在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量。这样做的好处是让使用常量的程序的执行性能与直接使用字面量是一样的。
常量做信息标志和分类
枚举
枚举的概述
枚举:特殊类型,为了做信息的标志和信息的分类。
格式:修饰符 enum 枚举名称 {第一行都是罗列枚举类实例的名称}
public enum Season {SPRING,SUMMER,AUTUMN,WINTER}
特征:
:::info
- 枚举类都是继承了枚举类型:java.lang.Enum
- 枚举都是最终类,不可以被继承
- 构造器都是私有的,枚举对外不能创建对象。
- 枚举类的第一行默认都是罗列枚举对象的名称
- 枚举类相当于是多例模式。
:::
枚举的使用场景演示
抽象类
abstract是抽象的意思,如果一个类中的某个方法的具体实现不能确定,就可以申明成abstract修饰的抽象方法(不能写方法体),【抽象方法:只有方法签名,没有方法体,使用了abstract修饰】这个类必须用abstract修饰,被称为抽象类。
抽象类格式:修饰符 abstract class 类名 {};
抽象方法格式:修饰符 abstract 返回值类型 方法名称 {形参列表};
public abstract class AbstructClass {public abstract void go();}
注意事项: :::warning
- 抽象类可以理解成类的不完整设计图,是用来被子类继承的。
- 一个类如果继承了抽象类,那么这个类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。 :::
抽象类的案例
抽象类的特征、注意事项
抽象类的特点: :::info
- 创建抽象类可以得到抽象方法,但是失去了创建对象的能力。
- 类有的成员(成员变量、方法、构造器)抽象类都具备
- 抽象类中不一定有抽象方法(例如:一个继承抽象类的没有重写抽象方法的子类),有抽象方法的类一定是抽象类。
- 一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
- 不能用abstract修饰变量、代码块、构造器。 :::
final和abstract的关系
:::info
互斥关系
abstract定义的抽象类作为模板让子类继承final定义的类不能被继承
抽象方法定义通过功能让子类重写。,final定义的方法子类不能重写。
:::
抽象类的应用知识:模板方法模式
模板方法模式:当系统中出现了同一个功能多处在开发,而该功能中大部分代码是一样的。只有其中部分可能不同的时候。
实现步骤:
把功能定义成一个所谓的模板方法,放在抽象类中,模板方法中只定义通用且能确定的代码 模板方法中不能决定的功能定义成抽象方法让具体子类去实现。 模板方法模式的作用
提高了代码的复用性
模板方法已经定义了通用结构,模板不能确定的定义成抽象方法。 使用者只需要关心自己需要实现的功能即可。
接口
接口概述、特点
:::info
- 接口:是一种规范。用来被类实现(implements)的
- 实现类:实现接口的类,可以理解为子类。所以接口就理解为父类。
- 实现类格式:修饰符 class 实现类 implements 接口1 接口2{}
- 实现的关键字:implements
:::
public interface interfacedemo {//定义了一个常量。public static final可以忽略不写String SCHOOL_NAME="黑马程序员";//定义了一个抽象方法。public abstract 可以省略不写。void run();void eat();}
注意事项: :::danger
- 接口
- 接口可以被类单实现,也可以被类多实现。
- 一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。
- 由于接口体现了规范的思想,规范默认都是公开的,所以代码层面,public abstract、public static final可以省略不写。
- 接口在JDK 8之前只能放常量和抽象方法。 :::
接口与接口的关系:多继承
小结
| 类和类的关系 | 单继承 |
|---|---|
| 类和接口的关系 | 多实现 |
| 接口和接口的关系 | 多继承,一个接口可以同时继承多个接口。 |
| 接口多继承的作用 | 规范合并,整合多个接口为同一个接口,便于子类实现。 |
JDK8开始接口新增方法
| 默认方法 | default修饰,实现类对象调用 |
|---|---|
| 静态方法 | static修饰,必须用当前接口名调用 |
| 私有方法 | private修饰,jdk9开始才有的,只能在接口内部被调用 |
