1 package cn.tju.acculation.base; 2 3 public class Extend { 4 5 public static void main(String args[]) { 6 //在方法覆盖中,左右俩边分别为父类和子类的时候,以左边作为调用的入口,右边作为调用的实际调用执行的方法。 7 P t2= new T(); 8 //t2是Parent的对象,t2调用的方法只能是Parent的方法,但是实际调用是调用子类还是父类的方法,是看new谁,new谁就调用谁 9 //只有子类的对象,才能调用子类的方法,以左边作为调用的入口,右边作为调用的实际调用执行的方法 10 t2.m();//output:this is t.m() 11 //t2.m2();//错误。因为P中没有此方法的入口 12 13 //这里new的是T,parent只是一个强制类型的转换。 14 P t3= (P)new T();//强转没有作用 15 t3.m();//output:this is t.m(),可见此时依旧是以右边作为调用的实际调用执行的方法 16 t3.m3();//output:this is p.m3(),因为T没有对m3()方法进行重写,所以执行P中的方法 17 } 18 } 19 20 class T extends P { 21 public void m() { 22 System.out.println("this is t.m()"); 23 } 24 25 public void m2(){ 26 System.out.println("this is t.m2()"); 27 } 28 } 29 30 class P { 31 public void m() { 32 System.out.println("this is p.m()"); 33 } 34 35 public void m3() { 36 System.out.println("this is p.m3()"); 37 } 38 }