Java知识点

您所在的位置:网站首页 b超a类和c类区别在哪儿查 Java知识点

Java知识点

2024-07-12 16:02| 来源: 网络整理| 查看: 265

定义子类

Java与C++定义继承类的方式十分相似。Java用关键字extends表示继承。在Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承。

public class Manager extends Employee { 添加方法和域 }

关键字 extends 表明正在构造的新类派生于一个已存在的类。已存在的类称为超类(superclass),新类称为子类(subclass)。超类和子类是 Java 程序员最常用的两个术语。在设计类的时候,应该将通用的方法放在超类中, 而将具有特殊用途的方法放在子类中。

覆盖方法

然而, 超类中的有些方法对子类并不一定适用。具体来说, Manager 类中的getSalary方法应该返回薪水和奖金的总和。为此,需要提供一个新的方法来覆盖(override)超类中的这个方法:

public class Manager extends Employee { public double getSalary() { ... } ... }

应该如何实现这个方法呢? 乍看起来似乎很简单, 只要返回 salary 和 bonus 域的总和就可以了:

public double getSalary() { return salary + bonus; // won't work }

然而,这个方法并不能运行。这是因为Manager 类的 getSalary 方法不能够直接地访问超类的私有域,只有 Employee 类的方法才能够访问私有部分。如果 Manager 类的方法一定要访问私有域, 就必须借助于Employee 类中的公有方法 getSalary 。 现在,再试一下。将对 salary 域的访问替换成调用 getSalary 方法。

public double getSalary() { double baseSalary = getSalary();// still won't work return baseSalary + bonus; }

上面这段代码仍然不能运行。问题出现在调用 getSalary 的语句上,这是因为 Manager 类也有一个 getSalary方法,所以这条语句将会导致无限次地调用自己,直到整个程序崩溃为止。可以使用特定的关键字 super 解决这个问题,即调用超类 Employee 中的 getSalary 方法, 而不是当前类的这个方法。为此:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3