代码
package com.java.test;

public class T extends Parent {
public void Method1(int a, int c, String b) {

System.out.println(
"this is t.t1");
}

public static void main(String args[]) {
T t
= new T();
t.Method1(
1, 1, "srx");

//在方法覆盖中,左右俩边分别为父类和子类的时候,以左边作为调用的入口,右边作为调用的实际调用执行的方法。
Parent t1= new T();
//t1是Parent的对象,t1调用的方法只能是Parent的方法,但是实际调用是调用子类还是父类的方法,是看new谁,new谁就调用谁
t1.Method1(0, 0, "");

//这里t new的是T,parent只是一个强制类型的转换。
Parent t2= (Parent)t;
t2.Method1(
0, 0, "");
//如果明确想调父类的方法,来个过渡方法,不能直接调用子类的方法t2,Parent里面只有t1和t5
//只有子类的对象,才能调用子类的方法,以左边作为调用的入口,右边作为调用的实际调用执行的方法。

t.t2();

}
public void t2(){
super.Method1(0, 0, "");
}


}

class Parent {

void Method1(int a, int b, String c) {

System.out.println("this is p.t1");

}


}

上面的程序在一个java类T里面。一句话,当左右类不同的时候,左边能够写出来的方法是左边类的方法,=右边是真正执行的方法所属于的类,也就是对象属于哪个类,new谁,执行谁的方法,如果进行了强制类型转换,对象是new谁的还是不变的。

执行后的结果为:

this is t.t1
this is t.t1
this is t.t1
this is p.t1

posted on 2010-08-18 09:32  snowdrop  阅读(14302)  评论(1)    收藏  举报