Java知识点——类、超类和子类

定义子类

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 方法, 而不是当前类的这个方法。为此:

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值