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 责编:豆豆技术应用