Jafe Lee

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  49 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks
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();
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(){}
    在后面的子类Manager中,可以按照如下所示的方法覆盖这个方法:
    public Manager getBuddy(){//OK in JDK 5.0
  • 如果方法是private, static, final或者是构造器,那么编译器将可以准确地知道应该调用那个方法。我们将这种调用方式称为静态绑定。但是,子类不能继承父类private (方法,更谈不上覆盖)不能覆盖final修饰的方法,但可一覆盖static方法
  • 覆盖一个方法的时候,子类方法不能低于超类方法的可见性。特别是如果超类得方法是public,那么子类方法一定要声明为public。
posted on 2007-07-22 16:40 Jafe Lee 阅读(705) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: