JAVA中几个易混淆关键词的正确理解

http://tech.ddvip.com   2006年11月22日    社区交流

本文详细介绍JAVA中几个易混淆关键词的正确理解

  在继承当中,有两个特殊行为需要我们关注:覆写(overriding)和重载(overloading)。现在你只需记住:如果baseclass和deriveclass的某个方法名称相同,引数相同,则为覆写(overriding),名称相同,引数相同,则为重载(overloading)。

  面向对象一个显著的优点就是多形(多态)性。我本来是不想在这第一部分写代码的,但是似乎这个问题用语言表达不够直观,所以就写了个最简单的能说明多形性的问题。看代码先。。。

  //Love.java
   classMM{
    publicvoidtoSeeGG(){
     System.out.println("xxx");
  }
  }
   classHaoseMMextendsMM{
    publicvoidtoSeeGG(){
     System.out.println("诱惑GG!!!");
  }
  }
   classBenfenMMextendsMM{
    publicvoidtoSeeGG(){
     System.out.println("好羞涩哦....");
  }
   }
publicclassLove{
    publicstaticvoidloveGG(MMi){
     i.toSeeGG();
  }
    publicstaticvoidmain(String[]args){
     MMmm1=newHaoseMM();
     MMmm2=newBenfenMM();
     loveGG(mm1);
     loveGG(mm2);
  }
  }

   该代码运行的结果是:

  诱惑GG!!!

  好羞涩哦....

  我们看到由MM衍生出来有好色MM(HaoseMM),本分MM(BenMM),MM们都可能会看到帅哥,但是好色MM和本分MM看帅哥的眼神是不一样的,如程序中定义。在爱(Love)这个类里,我们定义一个方法loveGG,我们给它传递一个参数,是基类(baseclass)MM,然后toSeeGG()。通过本文最开头的描诉,我们知道,HaoseMM和BenMM与MM的关系是isa的关系,所以我们在用到loveGG(mm1)和loveGG(mm2)时候编译器不会出错。我们看到,程序自动各自执行了haoseMM和BenfenMM的toSeeGG(),而不是打印出“xxx”。这就是多形性。之所以会如此神奇,是因为JAVA运行时环境提供了动态绑定技术。动态绑定会让你产生的MM在JAVA运行时环境里按照你的指示分别作出行为。OK,我们不需要知道动态绑定是怎么运做的,我们只要知道这是什么,因为我们还在第一章。上溯造型(upcasting)这个概念也在这里被提出来了。在loveGG(MMi)这个方法里,方法接受的是MM,可是loveGG也接受HaoseMM和BenfenMM,这个特性就叫上溯造型。

作者:godyin    责编:豆豆技术应用

正在加载评论...