继承

1. 继承

Java与C++定义继承类的方式十分相似。Java用关键字extends代替了C++中的冒号(:)。在Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承。

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

在Java中使用超类子类来表示基类和派生类。

2. super关键字

在Java中使用关键字super调用超类的方法,而在C++中则采用超类名加上::操作符的形式。
如果希望调用超类Employee中的getSalary方法,而不是当前类的这个方法,可以使用特定的关键字super解决这个问题。

public double getSalary()
{
  double baseSalary=super.getSalary();
  return baseSalary+bonus;
}

super在构造器中的应用:

public Manager(String n, double s, int month, int day)
{
  super(n,s,month,day);
  bonus=0;
}

这里写图片描述

3. 多态和动态绑定

多态(polymorphism):一个对象变量可以指示多种实际类型的现象。
动态绑定(dynamic binding):在运行时能够自动地选择调用哪个方法现象。

在Java中,不需要将方法声明为虚拟方法。动态绑定是默认的处理方式。
如果不希望让一个方法具有虚拟特征,可以将它标记为final

“is-a”规则:另一个表述法是置换法则,表明程序中出现超类对象的任何地方都可以用子类对象置换。
- 可以将一个子类的对象赋给超类变量。
- 但,不能将一个超类的引用赋给子类变量。

静态绑定(static binding):如果是private方法、static方法、final方法或者构造器,那么编译器将可以准确地知道应该调用哪个方法。
动态绑定(dynamic binding):调用的方法依赖于隐式参数的实际类型,并在运行时实现。

方法签名:方法的名字和参数列表。
虚拟机预先为每个类创建了一个方法表(method table),其中列出了所有方法的签名和实际调用的方法,在真正调用方法的时候,虚拟机仅查找这个表即可。

4. 继承层次

继承层次:由一个公共超类派生出来的所有类的集合。
继承链:在继承层次中,从某个特定的类到其祖先的路径。
Java不支持多继承。

5. 阻止继承:final类和方法

final类:不允许扩展的类,如果在定义类的时候使用了final修饰符就表明这个类是final类,用来阻止某个类定义子类。
final方法:类中的特定方法可以被声明为final,子类不能覆盖这个方法。
final类中的使用方法自动地成为final方法。

使用方法:

final class Executive extends Manager
{
  ...
  public final String getName()
  {
    return name;
  }
}

final域:域也可以被声明为final,对于final域来说,构造对象之后就不允许改变它们的值了。
如果将一个类声明为final,只有其中的方法自动地成为final,而不包括域。

将类或方法声明为final的主要目的是:确保它们不会在子类中改变语义。

6. Object:所有类的超类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值