文章插图
当使用protected修饰时,是可以在子类中调用的,那么下面为什么会报错呢,那是因为调用的方式不对,这里我们需要改变访
问方式并使用到super关键字 。
文章插图
文章插图
改为如下调用,在子类中调用,并使用super关键字,而不是通过实例化对象调用,上面那张图除了提到包还提到了类,小伙伴们注意到了吗?不记得的小伙伴们就往上翻再看看那张图吧 。
文章插图
至于public没啥好说的,哪都能用 。上面呢介绍了继承普通类的知识,现在我们来看看不太正常的类,抽象类,抽象类是指被abstract修饰,包含抽象方法的类,如下就是一个抽象类,首先是类名前面添加了abstract关键字,其次是其中包含了一个抽象方法,什么是抽象方法,就是没有被具体实现的方法,如下图的work方法,没有方法体,并被abstract修饰,不加的话会报错,被abstract修饰的类中可以没有抽象方法,这是语法允许的(jdk1.8测出来的),但是建议同步使用,要么既有abstract修饰类又有abstract方法,要么都没有,不然使用了abstract修饰类又不加abstract方法这不是闹吗,除非你不想这个类直接被实例化,注意一点,abstract修饰的类不能直接被实例化,需要被继承之后通过子类调用父类的构造方法,对从父类继承过来的字段进行初始化,注意这些继承过来的字段和方法都到了子类中了,但是子类能不能使用和如何使用就和给的权限(使用了什么访问修饰符限定)相关了,并没有实例化产生一个父类对象,有些地方说会实例化一个父类对象这是不对的,说一个极端的说法,父类为抽象类你能实例化吗?
文章插图
文章插图
当一个普通类继承一个抽象类的时候需要重写抽象类的所有抽象方法,如果不想重写的话就需要声明为抽象类,看下面代码
文章插图
文章插图
继承主要是为了代码的复用,减少代码的重复书写和为多态打一个基础,接下来我们聊聊多态
多态多态是一种思想,是同一份代码,不同的传参(子类)调用会产生不同的效果,绝对不是写死的代码多态是建立在继承机制上的一种机制,想要了解多态就必须知道向上转型,那么什么是向上转型呢,所谓的向上转型就是使用父类对象的引用,引用子类对象看下面代码
文章插图
文章插图
eacher是People的一个子类,使用People引用引用一个Teacher对象,向上转型是自动发生的,不需要进行强制类型转换,发生向上转型一般有三种情况1.像上面代码一样,让父类引用直接引用子类对象时 。2.子类作为函数调用时的实参,使用父类形参接收时 。3.子类作为父类返回值函数的返回值时 。总的说就是父类引用引用了子类对象
文章插图
红色的框表示第二种,橘黄色的框表示第三种
ps:不难理解吧QAQ
与向上转型对应的还有向下转型,就是将父类对象赋值给子类引用,一般很少用的,就简单地提一下吧,因为他发生条件比较严格,首先是不能直接强制类型转换,看下面代码(已经将People类变成了类)
文章插图
其次是需要父类引用引用子类的对象(发生过向上转型),最后需要强制转换为对应的子类对象,像下面这样
文章插图
ps:这东西用起来挺奇怪的,不太建议使用
到这里相信你应该知道什么叫做向上转型了,但是这还不足以接触多态,我们需要先来聊聊另外一个知识点,动态绑定,所谓动态绑定也叫运行时绑定,我们先来看看代码
推荐阅读
- 什么是 Java 的无服务器化?
- Javascript实现两变量值的互换
- 你知道古董收藏中的鹤顶红吗
- 让Excel表格自动排序,让你成为同事眼中的大神
- 硬核资源!阿里内部强推IntelliJ IDEA 中的常用配置,还不赶紧收藏
- java按顺序执行线程
- 战国时燕国是怎么强大起来的,燕国在战国七雄中的地位
- 五 虎骨酒的功效与作用
- 不要再封装各种Util工具类了,这个神级框架值得拥有
- 基于 el-form 封装一个依赖 json 动态渲染的表单控件