继承,从世俗的角度来解释便是子女得到父辈的财产或物品。程序中,继承是指两个类的从属关系,它可以使多种事物之间形成一种关系体系。例如贵宾和泰迪都是属于宠物犬,程序中便可以描述为贵宾和泰迪继承自动物。这篇要文章主要理清三个问题:
- 继承的概念是什么?
- 继承中如何重写父类的方法?
- 关键字super如何使用?
先看第一个问题,在Java中类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的类被称作子类,现有的类被称作父类,子类会自动拥有父类所有课继承的属性和方法。同时,程序中通常用extends关键字来声明一个继承另一个类,下面就通过一个案例来演示:
上面代码的运行结果是“动物的叫声”和“我的名字叫贵宾”。其中Dog类通过extends继承了Animal类,这样Dog类便是Animal类的子类。从运行结果可以看出,子类虽然没有定义name属性和shout方法,但是却能访问这两个成员,这也就说明了子类在继承父类的时候,会自动拥有父类的所有成员。但也有一些问题需要注意下:
- Java中,类只支持单继承不允许多重继承,也就是说一个类只能有一个父类。
- 多个类可以继承同一个父类。
- 可以多层继承,即一个类的父类可以去继承另外的父类。
- Java中的子列和父类只是一种相对概念。
接下来看第二个问题,继承中重写父类方法是怎么回事。
我们知道继承关系中,子类会自动继承父类中定义的方法,但有时在子类需要对继承的方法进行修改,即重写父类方法。好比父亲的理想,如果儿子不喜欢,可以去追求自己的梦想。
上面代码中,Dog类继承了Animal类中的shout方法,调用时会打印“动物的叫声”,这明显不是描述一种具体动物的叫声,Dog发出的叫声应该是“汪汪汪。。。”为了解决这个问题,可以在Dog类中重写父类Animal的shout()方法,具体代码如下:
运行结果是“汪汪汪。。。”。从运行结果可以看到,在调用Dog类对象的shout方法是,只会调用子类重写后的方法。
最后来看第三个问题,如何正确使用super关键字?
从上一个代码中可以看到,当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,Java中专门提供一个super关键字用于访问父类的成员。super的作用主要体现在两个方面:
- 使用super关键字调用父类的成员变量和方法,格式如下
super.成员变量;
super.成员方法({参数1,参数2...}); - 使用super关键字调用父类构造方法,格式如下
super.({参数1,参数2...});