在学习Java的继承之前,可以先复习一下C++的继承: http://www.jianshu.com/p/bc9b7ddb141c
继承就是子类(派生类)继承父类(基类)的特征和行为,使得子类对象(实例)具有与父类相同的行为。
牛和羊属于食草动物类,老虎和狼属于食肉动物类。 食草动物和食肉动物又是属于动物类。 所以继承需要符合的关系是:is-a,即子类 is a 父类。 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别。所以子类除了具有父类的一般特性外,也会具有自身的特性。
C++中的继承格式为 class 子类:访问权限修饰符 父类 比如class Dog : public Animal
Java中的继承格式为class 子类 extends 父类 比如class Dog extends Animal
extends表示扩展的意思,这个词表明了子类的父类的扩展
接下来我们通过实例来说明这个需求。 开发动物类,其中动物分别为猫和老鼠,要求如下: 老鼠:属性(姓名,id),方法(吃,睡,自我介绍,挖洞) 猫:属性(姓名,id),方法(吃,睡,自我介绍,抓老鼠)
编写Mouse类:
public class Mouse { private String name; public Mouse(String name){ this.name = name; } public void introduce() { System.out.println("Hello, everybody! My name is " + name + "."); } public void eat() { System.out.println("I am eating"); } public void sleep() { System.out.println("I am is sleeping"); } public void dig() { System.out.println("I am digging hole"); } }
编写Cat类:
public class Cat { private String name; public Cat(String name){ this.name = name; } public void introduce() { System.out.println("Hello, everybody! My name is " + name + "."); } public void eat() { System.out.println("I am eating"); } public void sleep() { System.out.println("I am is sleeping"); } public void catchMouse() { System.out.println("I am catching mouse"); } }
从这两段代码可以看出来,代码存在重复了,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错,比如要修改introduce方法中的内容,就得修改每个类中的introduce方法),所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成一个父类Animal
新建四个文件:Animal.java, Mouse.java, Cat.java, AnimalTest.java
Animal.java中的内容为:
public class Animal{ private String name; public Animal(String name) { this.name = name; } public void introduce() { System.out.println("Hello, everybody! My name is " + name + "."); } public void eat() { System.out.println("I am eating"); } public void sleep() { System.out.println("I am sleeping"); } }
Mouse.java中的内容:
public class Mouse extends Animal { public Mouse(String name) { super(name); } public void dig() { System.out.println("I am digging hole"); } }
Cat.java中的内容:
public class Cat extends Animal { public Cat(String name) { super(name); } public void catchMouse() { System.out.println("I am catching mouse"); } }
AnimalTest.java中的内容:
public class AnimalTest { public static void main(String[] args) { Mouse mouse = new Mouse("Jerry"); mouse.introduce(); mouse.eat(); mouse.sleep(); mouse.dig(); System.out.println(); Cat cat = new Cat("Tom"); cat.introduce(); cat.eat(); cat.sleep(); cat.catchMouse(); } }
运行结果:
分析: Java中父类的构造方法不能被子类继承,但可以被子类调用。 Mouse类和Cat类中的构造函数里的super(name)语句,就是调用父类的构造方法。
本文分享自微信公众号 - 海天一树(gh_de7b45c40e8b)
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2018-01-05
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句