news 2026/10/6 18:50:57

Java类与继承

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java类与继承

Java 面向对象:类的继承(extends)与重写

前言

这是学习Java类与继承的笔记,用动物作为父类,狗,猫作为子类进行一个示范。本篇记录继承相关的基础知识。

环境

  • JDK 17
  • IntelliJ IDEA
  • 纯 Java 项目(未使用 Maven)

一、什么是继承

继承,也就是让子类自动拥有父类所有的属性和方法,关键字extends:

publicclassDogextendsAnimal{...}

即Dog为Animal的子类,这样Dog就不用重复写Animal已经有的属性和方法了。
有利于进行代码复用:公共的部分放父类,各子类只写自己特有的部分。

二、父类与子类

父类Animal,代表所有动物的共性:名字、年龄,会叫、会动。

publicclassAnimal{privateStringkind;//设置私有属性种类,私有属性只能通过类中设定的方法访问privateintage;//年龄publicvoidsetKind(Stringkind){this.kind=kind;//设置函数让外界可以访问私有属性}publicStringgetKind(){returnkind;//设置函数让外界可以获取私有属性}publicvoidsetAge(intage){this.age=age;}publicintgetAge(){returnage;}publicvoidshout(){System.out.println(kind+"发出叫声");//通用函数}publicvoidmove(){System.out.println(kind+"做出动作");}}

注意kind、age都是private私有属性。这是"封装":属性私有,外面要通过setKind/getKind这类方法(合称getter/setter)来访问。

三、子类与"私有属性不能直接访问"

让Dog继承Animal:

publicclassDogextendsAnimal{publicvoidspeakKind(){System.out.println(getKind());}}

这里Dog里不能写kind,因为kind是父类的私有属性,无法直接访问,只能通过继承来的getKind()来访问。
这就是封装的作用,子类虽然能继承,但不能直接访问,只能通过公有的 getter/setter来读写。

四、方法重写(override)与 super

父类的shout()只打印通用的"发出叫声"。对于子类Dog应该有狗的叫法,因此需要重写方法:

publicclassDogextendsAnimal{publicvoidshout(){super.shout();//先执行父类的通用方法System.out.println("汪汪!");//加上子类自己的}}

重写(覆盖):方法名、参数、返回值必须完全一样,只有方法函数体换成子类的。

  • super.shout();表示先调用一遍"父类自己的那版方法"。
  • 注意!!!如果写成this.shout();就变成了调用自己,就会形成死循环。

五、子类新增自己的方法

除了重写,子类可以加父类没有的方法,比如Dog的speakKind():

publicclassDogextendsAnimal{publicvoidspeakKind(){System.out.println(getKind());}}

用"猫"再写一个子类Cat作为对比,只需重写shout()/move():

publicclassCatextendsAnimal{publicvoidshout(){super.shout();System.out.println("喵喵!");}publicvoidmove(){super.move();System.out.println("走动");}}

六、测试

publicclassTest{publicstaticvoidmain(String[]args){Dogdog=newDog();//新建Dog对象dog.setKind("小狗");//通过方法设置私有属性dog.setAge(3);dog.shout();//dog类重写过的方法,小狗发出叫声dog.move();System.out.println(dog.getKind()+"今年"+dog.getAge()+"岁");//通过getter来访问内容}}

运行后发现:同样是shout(),狗"汪汪"、猫"喵喵",父类定好框架,子类则可以按照各自的需求具体实现。

七、错误记录

  1. super写成了this:一开始重写时写this.shout();,结果方法自己调自己,造成了无限递归。调父类版本必须用super。

八、总结

本篇掌握了继承、方法重写的基本概念。
继承让共性代码放在父类复用,子类只需要重写差异部分,这就是面向对象"复用 + 扩展"的思想。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 18:29:56

工业测距传感器选型实战:激光/超声波/毫米波三大方案深度对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 18:29:23

Type-C线材故障根因:CC引脚与E-MARK芯片深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 18:27:31

AP6256 WiFi蓝牙模块PCB设计实战:布局布线、阻抗与接地全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华