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
http://www.cnblogs.com/snowdrop/articles/1807828.html