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

 

 

posted on 2011-11-22 16:36  易初莲花  阅读(621)  评论(0编辑  收藏  举报