Java继承

1、关键字super有两个用途:一是调用超类的方法,而是调用超类的构造器。
super不是对一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特有关键字。super在构造器中的作用:
public  Manager(String n,  double  s,  int  year,  int  month,  int  day)    
{      
  
super (n, s, year, month, day);    
  bonus 
=   0 ;    
}    

由于构造器不能范围Employee类的私有域(具体例子见本文最后面PersonTest.java),所以必须利用Employee类的构造器对这部分私有域进行初始化 ,我们可以通过super实现对超类构造器的调用。使用super调用构造器的语句必须是 类构造器的第一条语句。如果之类的构造器没有显示的调用超类的构造器,这将自动调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中没有显示地调用超类的其它构造器,则Java编译器将报告错误,这个规则对与abstract base class 也是成立的。

2、关键字this有两个用途:一是引用隐式参数,二是调用该类的其它的构造器。在调用构造器时和super很相似,都只能作为另一个构造器的第一条语句出现。

3、多态。先看例子:
Manager boss  =   new  Manager(dot.gif);
Employee [] staff 
=   new  Employee[ 3 ];
staff[
0 =  boss;
在这个例子中,变量staff[0]和boss引用同一个对象.但编译器将staff[0]看待成Employee对象.这意味着可以这样调用:
boss.setBonus(5000);
但不能这样调用
staff[0].setBonus(5000);//error,这样会引起一个编译错误
这是因为staff[0]声明的类型是Employee,而setBonus不是Empoyee类的方法。

4、动态绑定:
  • 方法的名字和参数列表被称为方法的签名(signature).如果在子类中定义了一个与超类签名相同的方法,那么子类中的这个方法就覆盖了超类中的这个同签名的方法。但是,返回类型不是签名的一部分,因此在覆盖方法的时候,一定要保证返回类型的兼容性。在JDK 5.0以前的版本中,要求返回类型必须是一样的。而现在允许子类将覆盖方法返回类型定义为原返回类型的子类型。例如,假设Employee类有:
    public  Employee getBuddy(){dot.gif}
    在后面的子类Manager中,可以按照如下所示的方法覆盖这个方法:
    public  Manager getBuddy(){dot.gif // OK in JDK 5.0
  • 如果方法是private, static, final或者是构造器,那么编译器将可以准确地知道应该调用那个方法。我们将这种调用方式称为静态绑定。但是,子类不能继承父类private (方法,更谈不上覆盖)不能覆盖final修饰的方法,但可一覆盖static方法
  • 覆盖一个方法的时候,子类方法不能低于超类方法的可见性。特别是如果超类得方法是public,那么子类方法一定要声明为public。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值