文章插图
文章插图
先可以看到三个输出,第一个输出睡觉,第三个输出教书没问题吧,问题就出在第二个上面,我明明调用的是people的work方法,为什么输出的不是睡觉,而是教书呢?这就是发生了动态绑定,所谓动态绑定就是使用父类引用引用子类对象然后(向上转型)去调用父类和子类相同的方法(返回值(构成父子类关系也可以,也就是协变类型),方法名,形参列表完全相同)换句话说也就是说在子类中重写了父类的方法,这样的重写需要注意一些点,那就是子类重写的方法的访问权限必须不小于父类的方法的权限也就是说父类为public子类就必须为public因为public是最大的权限,权限对应上图的 √的个数√越多权限越大,静态方法不能重写,被final修饰的方法(密封方法)不能重写 。ps:与动态绑定对应的还有静态绑定,这里就不多说了…好了,知道了向上转型和动态绑定就可以了解多态了,看代码
文章插图
是不是觉得很神奇,明明是指向了同一份代码却打印了不同的结果,这就是多态,我不管你怎么实现的方法,只要你有这个方法我就能帮你调用,并且这里如果是子类对象会发生向上转型,进而发生动态绑定,形成多态,上面是通过继承来实现的多态,接下来我们再来讲一个东西实现多态,接口
接口那么接口是什么呢,接口也可以想象成一个类,但是它既然单独出现,肯定说明它和类有有所不同,首先接口由interface关键字定义,并且其中的所有方法都默认为public abstract的,所有字段都默认为public static final的,下面几种定义方式并无区别 。
文章插图
然后类似与继承,接口可以通过implements被实现,实现也很简单,和继承抽象类一样重写所有的抽象方法即可,同样接口不
能被直接实例化 。
文章插图
有了上面的了解,我们来用接口实现多态,看下面代码,也和类实现多态没什么很大区别,也类似与发生了向上转型和动态绑定,实现接口和继承类的一个很大区别就是一个类只能继承一个类,但是一个类可以实现多个接口 。
文章插图
文章插图
一些建议和小结【Java中的封装、继承和多态,你真的都懂了吗】1.建议字段的访问权限能给小绝不给大,能使用private修饰的字段一定要用private,提高安全性 。
2.继承的层次不要太深,建议最多继承三层,使用final修饰可以让类无法被继承 。
3.抽象类的出现就是为了继承之后重写发生动态绑定 。
4.能使用接口就不要使用抽象类,因为类只能单继承,但是接口可以“多继承”,更加的灵活 。
5.多态的核心都是让调用者不必关注对象的具体类型. 这是降低用户使用成本的一种重要方式 。
6.抽象类和接口的核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法 。
7.接口中的方法和字段定义都只写必要部分,尽量简洁像博主上面一样
写在最后的话
文章插图
推荐阅读
- 什么是 Java 的无服务器化?
- Javascript实现两变量值的互换
- 你知道古董收藏中的鹤顶红吗
- 让Excel表格自动排序,让你成为同事眼中的大神
- 硬核资源!阿里内部强推IntelliJ IDEA 中的常用配置,还不赶紧收藏
- java按顺序执行线程
- 战国时燕国是怎么强大起来的,燕国在战国七雄中的地位
- 五 虎骨酒的功效与作用
- 不要再封装各种Util工具类了,这个神级框架值得拥有
- 基于 el-form 封装一个依赖 json 动态渲染的表单控件