Notes of "Thinking in Java 3rd Edition" (四)
[b][size=5]第7章 多态[/size][/b][b]一.再探向上转型(upcasting)[/b]
将某个objectreference视为一个“referencetobasetype“的动作,称为向上转型。
1. Upcasting后调用某个函数时,如果derivedclass中覆写了该函数,则会调用derivedclass中的函数;否则,会调用baseclass中的函数。如
class First{
public void prt(){8`~)Uins
System.out.println("First");
}
}
class Second extends First{
//(a)
public void prt(){
System.out.println("Second");{!wP%v+_{vS-@Pa,m
}
}
public class ExplicitStatic{]&L4~ Cs"^
public static void main(String[] args){3@}'R_3N7JU
First n = new Second();
n.prt();; eDL/{r$^
}
}
结果为Second。如果当Secondclass中的prt()函数注释掉,将输出First。
2. 向上转型后只能调用baseclass中被derivedclass覆写的函数。
/*
abstract class First{tG.YBy&b u
int i = 122;:p2r I%a]
public void prt(){f)qmmU3G
System.out.println("First.i = " + i);TtI7w5|VG d
}%\cAr?_K2z
public abstract void prt(First f);b V'X2C+R$o$an
}iu.X7{/w9q:\m
class Second extends First{Q~@/UZ:TW
public void prt(){B(~AT#h|loN3d
System.out.println("Second.i = " + i);DK"lzJ4{
}
public void prt(First i)
{%}\+nZL%CG
})^[mBqHh M`
public void prt(int i)
{9p6u dk1R0b!Z)H~
}
}j9A&U#[ I!f#h:LH
public class ExplicitStatic{1H xNf'Co{ R$[{!b
public static void main(String[] args){
First n = new Second();