
Java 面向对象类的继承extends与重写前言这是学习Java类与继承的笔记用动物作为父类狗猫作为子类进行一个示范。本篇记录继承相关的基础知识。环境JDK 17IntelliJ IDEA纯 Java 项目未使用 Maven一、什么是继承继承也就是让子类自动拥有父类所有的属性和方法关键字extendspublicclassDogextendsAnimal{...}即Dog为Animal的子类这样Dog就不用重复写Animal已经有的属性和方法了。有利于进行代码复用公共的部分放父类各子类只写自己特有的部分。二、父类与子类父类Animal代表所有动物的共性名字、年龄会叫、会动。publicclassAnimal{privateStringkind;//设置私有属性种类私有属性只能通过类中设定的方法访问privateintage;//年龄publicvoidsetKind(Stringkind){this.kindkind;//设置函数让外界可以访问私有属性}publicStringgetKind(){returnkind;//设置函数让外界可以获取私有属性}publicvoidsetAge(intage){this.ageage;}publicintgetAge(){returnage;}publicvoidshout(){System.out.println(kind发出叫声);//通用函数}publicvoidmove(){System.out.println(kind做出动作);}}注意kind、age都是private私有属性。这是封装属性私有外面要通过setKind/getKind这类方法合称getter/setter来访问。三、子类与私有属性不能直接访问让Dog继承AnimalpublicclassDogextendsAnimal{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){DogdognewDog();//新建Dog对象dog.setKind(小狗);//通过方法设置私有属性dog.setAge(3);dog.shout();//dog类重写过的方法小狗发出叫声dog.move();System.out.println(dog.getKind()今年dog.getAge()岁);//通过getter来访问内容}}运行后发现同样是shout()狗汪汪、猫喵喵父类定好框架子类则可以按照各自的需求具体实现。七、错误记录super写成了this一开始重写时写this.shout();结果方法自己调自己造成了无限递归。调父类版本必须用super。八、总结本篇掌握了继承、方法重写的基本概念。继承让共性代码放在父类复用子类只需要重写差异部分这就是面向对象复用 扩展的思想。