下面就来使用继承来简化上面的程序。
8.5 方法的重写和重载
• 方法的重写和重载是体现继承特性的重要方面,理解了方法的重 写和重载,可以为以后学习多态打下基础,本节重点学习重写和 重载的用法和区别。
8.5.1 方法重写的特点
• 自行车的移动和公路赛车的移动都是靠外力来移动,二者是相同 的。公路赛车继承了这一特点,但公路赛车的移动速度就不相同 了,移动的快慢就是由它们各自移动特性不相同决定的,方法继 承的特点和成员变量的覆盖很类似,但也有特殊情况,方法重写 也可以叫方法的覆盖。关键字为override。
• 【范例】下面用例子说明在日常生活中自行车和公路赛车的相同 点和不同点。
8.5.2 方法重载的特点
• 方法的重载就好比日常生活中人的名字,有大名也有小名,但这 些名字都指的是这个人,不同点就是让这个人去做的事情可能不 一样,如图所示。
• 这和Java里的重载很相似,关键字为overload。下面看一下重载的要求
• public String move(){};
• public String move(String name){};
• public void move(String name, int spend){};
• 代码说明:
8.5.3 重写的返回类型
• 方法有它的返回类型,而重写的方法也有返回类型,并有一些相 应的限制。方法被重写后,返回的类型为基本类型时,重写方法 的返回要必须一样,否则会出现错误。
• 【范例】下面是演示重写返回类型的代码。
8.5.4 重写是基于继承的
• 重写和重载的产生是基于继承的,如果没有发生继承就不会产生 重写和重载了。举个例子来说,自行车通过外力可以移动,而公 路赛车通过外力也可以移动,公路赛车继承了自行车的特性。也 可以说成,公路赛车是自行车的一个升级版本。相当于一个参照 点吧,如图所示。
8.5.5 静态方法是不能重写的
• 静态方法就是被修饰为了static类型的方法,如果在类里声明具 有唯一性,不是通过类的实例化而存在的,而是通过类的建立而 存在,可以理解为用关键字new创建对象了,就是把这个对象实例 化了。
• 对本节的内容进行如下总结。
• 父类的静态方法可以被子类的静态方法覆盖。
• 父类的非静态方法不能被子类的静态方法覆盖。
• 父类的静态方法不能被子类的非静态方法覆盖。
• 覆盖是用于父类和子类之间。
• 重写是用在同一个类中,有相同的方法名,但参数不一样。
8.5.6 三者之间的关系
• 对重载总结如下:
• 使用重载时只能定义不同的参数列表。
• 不能通过重载的方法的返回类型、访问权限和抛出的异常来进行 方法的重载。
• 对重写总结如下:
• 重写的方法存在于父类中,也存在于子类中。
• 重写的方法在运行期采用多态的形式。
• 重写的方法不能比被重写的方法有更高的访问限制。
• 重写的方法不能比被重写的方法有更多的异常。
8.5.7 重写toString
• toString()方法是Java里Object类的方法,很多类都重写了该方 法。该方法返回对象的状态信息。下面是这个方法的原型:
• public String toString()
8.5.8 重写equals
• 方法equals也是Object类的方法,很多类也进行了重写,一般重 写equals方法是为了比较两个对象的内容是否相等。下面是这个 方法的原型:
• public boolean equals(Object obj)
• {
• return (this == obj); //这里比较的是两个对象的引用
• }