Java中的封装,继承和多态(详解)

Java中的封装,继承和多态(详解)目录封装继承封装所谓的封装就是把类的属性和方法使用 private 修饰 不允许类的调用者直接访问 我们定义如下一个类 可以看到所有的成员变量和成员方法都使用 private 修饰了 我们现在来使用一下这个类 当我们使用的时候编译器给出了下面这样的报错 告诉我们说是 private 访问控制 那么这是什么意思呢 我们来看看另外一张图 那么这张图代表这什么呢 在看这张图之前 我们先来看看四者都提到的包 那么包又是什么呢 包可以简单理解为一个文件夹 把类放到放到包里面 也就相当于是专门的文件夹里面 这不是我们说的

封装

在这里插入图片描述
ps:这里重写了toString方法才会是下面的输出形式。
上面就是调用了,那么有的读者可能就会问了,那你的eat方法还是private的呀,我还是不能调用啊,这里我解释一下,这是因为我是为了演示private的作用而在eat方法前面加的private,运行时我将它注释掉了,至于实际上像eat这样需要被类的调用者直接使用的方法,肯定是不能使用private修饰的,至于用什么访问权限修饰这就是类的设计者根据日后业务的需要而决定了。
封装的第一个作用就是为了不直接被外部使用,提高代码的安全性,第二个作用就是降低类的使用者的学习成本,不需要知道类的实现,只需要学会调用就好了,封装差不多就介绍完了,接下来聊聊继承。


继承

多态

多态是一种思想,是同一份代码,不同的传参(子类)调用会产生不同的效果,绝对不是写死的代码
多态是建立在继承机制上的一种机制,想要了解多态就必须知道向上转型,那么什么是向上转型呢,所谓的向上转型就是使用父类对象的引用,引用子类对象看下面代码
在这里插入图片描述
在这里插入图片描述
Teacher是People的一个子类,使用People引用引用一个Teacher对象,向上转型是自动发生的,不需要进行强制类型转换,发生向上转型一般有三种情况
1.像上面代码一样,让父类引用直接引用子类对象时。
2.子类作为函数调用时的实参,使用父类形参接收时。
3.子类作为父类返回值函数的返回值时。
总的说就是父类引用引用了子类对象
在这里插入图片描述
红色的框表示第二种,橘黄色的框表示第三种
ps:不难理解吧QAQ
与向上转型对应的还有向下转型,就是将父类对象赋值给子类引用,一般很少用的,就简单的提一下吧,因为他发生条件比较严格,首先是不能直接强制类型转换,看下面代码(已经将People类变成了类)
在这里插入图片描述
其次是需要父类引用引用子类的对象(发生过向上转型),最后需要强制转换为对应的子类对象,像下面这样
在这里插入图片描述
ps:这东西用起来挺奇怪的,不太建议使用
到这里相信你应该知道什么叫做向上转型了,但是这还不足以接触多态,我们需要先来聊聊另外一个知识点,动态绑定,所谓动态绑定也叫运行时绑定,我们先来看看代码
在这里插入图片描述

















在这里插入图片描述
首先可以看到三个输出,第一个输出睡觉,第三个输出教书没问题吧,问题就出在第二个上面,我明明调用的是people的work方法,为什么输出的不是睡觉,而是教书呢?这就是发生了动态绑定,所谓动态绑定就是使用父类引用引用子类对象然后(向上转型)去调用父类和子类相同的方法(返回值(构成父子类关系也可以,也就是协变类型),方法名,形参列表完全相同)换句话说也就是说在子类中重写了父类的方法,这样的重写需要注意一些点,那就是子类重写的方法的访问权限必须不小于父类的方法的权限也就是说父类为public子类就必须为public因为public是最大的权限,权限对应上图的 的个数√越多权限越大,静态方法不能重写,被final修饰的方法(密封方法)不能重写。
ps:与动态绑定对应的还有静态绑定,这里就不多说了…
好了,知道了向上转型和动态绑定就可以了解多态了,看代码
在这里插入图片描述
是不是觉得很神奇,明明是指向了同一份代码却打印了不同的结果,这就是多态,我不管你怎么实现的方法,只要你有这个方法我就能帮你调用,并且这里如果是子类对象会发生向上转型,进而发生动态绑定,形成多态,上面是通过继承来实现的多态,接下来我们再来讲一个东西实现多态,接口




接口

那么接口是什么呢,接口也可以想象成一个类,但是它既然单独出现,肯定说明它和类有有所不同,首先接口由interface关键字定义,并且其中的所有方法都默认为public abstract的,所有字段都默认为public static final的,下面几种定义方式并无区别,在这里插入图片描述
然后类似与继承,接口可以通过implements被实现,实现也很简单,和继承抽象类一样重写所有的抽象方法即可,同样接口不能被直接实例化。
在这里插入图片描述
有了上面的了解,我们来用接口实现多态,看下面代码,也和类实现多态没什么很大区别,也类似与发生了向上转型和动态绑定,实现接口和继承类的一个很大区别就是一个类只能继承一个类,但是一个类可以实现多个接口
在这里插入图片描述
在这里插入图片描述
其中接口也可以扩展接口,看下面代码
在这里插入图片描述
从jdk1.8开始接口中可以包含默认方法了需要使用default关键字修饰,和类的成员方法一样,看下面代码,到这里接口就差不多聊完了,小结一下
在这里插入图片描述








一些建议和小结

写在最后的话

以上就是博主这段时间学习的主要内容了,也查了不少资料,限于博主水平有限,文章难免有说错或表述不清的地方,欢迎小伙伴们在评论区或私信博主指出,最后希望本篇博客能对小伙伴们有所帮助,好了本篇博客到此就结束了,我们下篇博客见。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205862.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:01
下一篇 2026年3月19日 下午5:01


相关推荐

  • MySQL中IFNULL函数的使用方法

    MySQL中IFNULL函数的使用方法IFNULL 函数是 MySQL 控制流函数之一 它接受两个参数 如果不是 NULL 则返回第一个参数 否则 IFNULL 函数返回第二个参数 两个参数可以是文字值或表达式 一 语法格式 IFNULL expression 1 expression 2 如果 expression 1 不为 NULL 则 IFNULL 函数返回 expression 1 否则返回 expression 2 的结果 如

    2026年3月19日
    3
  • Oracle 12.1.0.2 对JSON的支持

    Oracle 12.1.0.2 对JSON的支持

    2022年3月3日
    65
  • 表白代码Python_自制表白神器

    表白代码Python_自制表白神器文章目录前言演示网站制作部署网站二维码制作总结前言跟着我做,不要跳着看,否则你会失败。第一步是制作二维码;第二步是制作网站。演示具体成果地址:https://yanghanwen.xyz/ai/网站制作首先你需要下载我的这个完整项目:链接:https://pan.baidu.com/s/1EmRehx_gRnT5hLjJvKuAIg提取码:pz1y–来自百度网盘超级会员V2的分享下载好后文件目录如下:然后你需要注意的是我把img里面的图片删了,涉及隐私,大家自己替换自己追

    2022年8月23日
    11
  • App测试面试题_手机软件测试

    App测试面试题_手机软件测试1.Web端测试和App端测试有何不同(常见)系统结构方面Web项目,b/s架构,基于浏览器的;Web测试只要更新了服务器端,客户端就会同步会更新;App项目,c/s结构的,必须要有客户端;App修改了服务端,则客户端用户所有核心版本都需要进行回归测试一遍;兼容方面Web项目:a.浏览器(火狐、谷歌、IE等)b.操作系统(Windows7、Windows10、Linux等)App项目:a.设备系统:iOS(ipad、iphone)、Android(三星、华为、联想等)、

    2025年9月19日
    7
  • HDU 4337 King Arthur's Knights 它输出一个哈密顿电路

    HDU 4337 King Arthur's Knights 它输出一个哈密顿电路

    2022年1月16日
    43
  • 使用 EasyPOI 优雅导出Excel模板数据(含图片)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:星悬月 blog.csdn.net/u012441819/article/details/96828044 E…

    2021年6月24日
    248

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号