Java由浅入深讲解继承下
本篇紧接上一篇内容继续,还是从继承里的细节开始
1.代码块初始化
关于代码块的定义和使用因为之前已经进行过介绍,所以这里就不再赘述,我们所关注的点是父类和子类中的代码块在运行时候的先后顺序是怎样的
首先还是在父类以及子类中添加代码块,如下:
//父类
{
System.out.println("父类实例代码块");
}
static {
System.out.println("父类静态代码块");
}
public Plant() {
System.out.println("父类构造方法");
}
//子类
{
System.out.println("子类实例代码块");
}
static {
System.out.println("子类静态代码块");
}
public Tree() {
System.out.println("子类构造方法");
}我们在main方法中实例化子类对象后来看一下结果:

静态代码块依旧是最先被执行的,然后是父类的实例代码块和构造方法,最后是子类的实例代码块和构造方法
静态代码块由于只执行一次,所以如果再实例化一次子类对象的话父类和子类的静态代码块都不会再执行
2.protected关键字
之前的访问修饰限定符中还遗留了一个protected,这里把这个坑填上,procted在包访问权限的基础上多了一个权限:不同包中的子类可以访问父类的成员
假设Plant和Tree分别在两个包中,那么Plant中protected修饰的成员依旧可以在Tree中使用super来进行访问
需要注意的一点:父类必须是用public修饰,否则访问权限不够,不同包的两个类根本无法构成继承关系
4个访问修饰限定符都讲完了,这里作一个总结:
| 访问范围 | private | default | protected | public |
| 同一包中的同一类 | √ | √ | √ | √ |
| 同一包中的不同类 | × | √ | √ | √ |
| 不同包中的子类 | × | × | √ | √ |
| 不同包中的非子类 | × | × | × | √ |
3.final关键字
final关键字同样是用来修饰类、方法以及变量的,作用如下:
修饰变量:成为常量,无法被修改
修饰方法:不能被重写
修饰类:不能作为父类被其它类继承
4.Java中允许的继承方式
单继承:A继承B
多层继承:A继承B,B继承C、C继承D......
不同类继承同一个父类:A继承B,C也继承B
但是Java中不允许一个类继承多个父类(即C++中的多继承)
Java继承的内容结束,后面就是多态的内容,完
到此这篇关于Java由浅入深讲解继承下的文章就介绍到这了,更多相关Java继承内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
关于Spring Bean实例过程中使用反射和递归处理的Bean属性填充问题
本文带领大家一起学习下在Spring Bean实例过程中如何使用反射和递归处理的Bean属性填充,需要在类 AbstractAutowireCapableBeanFactory 的 createBean 方法中添加补全属性方法,具体操作方法跟随小编一起学习下吧2021-06-06
Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整理
LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入/删除);并且,该阻塞队列是支持线程安全。2017-06-06
如何在SpringBoot中添加拦截器忽略请求URL当中的指定字符串
这篇文章主要介绍了在SpringBoot中添加拦截器忽略请求URL当中的指定字符串,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-08-08


最新评论