面向对象进阶(包、final、权限修饰符、代码块、抽象类和抽象方法)
包就是文件夹。用来管理各种不同功能的Java类,方便后期代码维护。(1)包名的规则:公司域名反写+包的作用,需要全部英文小写,见名知意。例如:com.itheima.domaincom.itheima.a01oopextends.Animal被称为全类名或者全限定名可以理解为上述方式才是类真正的名字(2)使用其他类的规则使用同一个包中的类时,不需要导包使用Java.lang包中的类时,不需要导包其
1.什么是包?
包就是文件夹。用来管理各种不同功能的Java类,方便后期代码维护。
(1)包名的规则:公司域名反写+包的作用,需要全部英文小写,见名知意。
例如:com.itheima.domain
例如:

com.itheima.a01oopextends.Animal被称为全类名或者全限定名
可以理解为上述方式才是类真正的名字
(2)使用其他类的规则
- 使用同一个包中的类时,不需要导包
- 使用Java.lang包中的类时,不需要导包
- 其他情况都需要导包
- 如果同时使用俩个包中的同名类,需要用全类名


2.final
(1)final修饰方法、类、变量(前两种知道就行,第三个需要掌握)
方法---表明该方法是最终方法,不能被重写

//一般什么时候用final修饰方法呢
//如果当前方法是一种规则,这个规则我不希望别人去修改
//此时这个方法就可以用final修饰
类---表明该类是最终类,不能被继承

//当你想要这个类中的所有方法都不被别人修改时,用final修饰当前类
变量---叫做常量,只能被赋值一次

//被final修饰的变量只能被赋值一次,并且只能在定义的时候赋值,否则报错
(2)常量
实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性
常量的命名规范:
- 单个单词:全部大写
- 多个单词:全部大写,单词之间用下划线隔开
细节:
fianl修饰的变量是基本类型:那么变量存储的数据值不能发生改变
final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,对象内部的可以改变
核心:
常量记录的数据是不能发生改变的


3.权限修饰符
- 权限修饰符:是用来控制一个成员能够被访问的范围的
- 可以修饰成员变量、方法、构造方法、内部类
(1)有四种作用范围由小到大(private<空着不写/默认<protected<public)
| 修饰符 | 同一个类 | 同一个包中其他类 | 不同包下的子类 | 不同包下的无关类 |
|---|---|---|---|---|
| private | √ | |||
| 空着不写 | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
(2)权限修饰符的使用规则
实际开发中,一般只用private和public
- 成员变量私有
- 方法公开
特例:如果方法中的代码是抽取其他方法中的共性代码,这个方法一般也私有
4.代码块
- 局部代码块
- 构造代码块
- 静态代码块
(1)局部代码块
提前结束变量的生命周期(已淘汰,了解一下就行)

(2)构造代码块
抽取构造方法中的重复代码(不够灵活,了解即可)
(3)静态代码块(重点)
格式:static{}
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次
使用场景:在类加载的时候,做一些数据初始化的时候使用
5.抽象方法
- 抽象方法:将共性的行为(方法)抽取到父类之后。
由于每一个子类执行到内容是不一样,
所以,在父类中不能确定具体的方法体。
该方法就可以被定义为抽象方法。
- 抽象类:如果一个类中存在抽象方法,那么该类必须声明为抽象类
(1)抽象类和抽象方法的定义格式
抽象方法的定义格式:
public abstract 返回值类型 方法名(参数列表);
抽象类的定义格式:
public abstract class 类名{}
(2)抽象类和抽象方法的注意事项
- 抽象类不能实例化
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 可以有构造方法(作用:当创建子类对象时,给属性进行赋值的)
- 抽象类的子类,要么重写抽象类中的所以抽象方法(主要是采取这种),要么是抽象类
(3)抽象类的作用
抽取共性时,无法确定方法体,就把方法定义为抽象的
强制让子类按照某种格式重写
抽象方法所在的类,必须是抽象类
更多推荐


所有评论(0)