java中如何判断一个子类方法是否已经被重写?

qgbcs 2014-08-08 05:12:29
假如你只有一个·子类对象的引用p
如何判断p是否重写了父类方法呢?(如Object.toString() )

各位有什么好的方法?
...全文
1437 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
langjian_lin 2014-08-11
  • 打赏
  • 举报
回复
用反射机制,,看是否与父类有重复的,看其参数是否不同等,重写判断条件
Joyce-Luo 2014-08-11
  • 打赏
  • 举报
回复
3楼正解,通过反射可以轻松实现,大牛很多呀!不过这需求确实够BT的
betajeff 2014-08-11
  • 打赏
  • 举报
回复
认同,使用反射
kunkunqian 2014-08-11
  • 打赏
  • 举报
回复
认同,使用反射
铭浩 2014-08-09
  • 打赏
  • 举报
回复
反射啊,反死他
di_wq 2014-08-09
  • 打赏
  • 举报
回复
3楼正解,一般用反射不会用到这种特殊的需求吧,看来还是有高手能够解决的,只是不明白楼主为什么会有这样的需求,初衷是什么?
rumlee 2014-08-09
  • 打赏
  • 举报
回复
用getDeclaredMethods方法竟然真能够做到,从来只用过getMethods方法,没有用过getDeclaredMethods方法。 不好意思,是我孤陋寡闻了。
结贴是美德 2014-08-09
  • 打赏
  • 举报
回复
反射不就完了
zhjh1111 2014-08-08
  • 打赏
  • 举报
回复
package com.test;

public class A {
	public void test1(int i) {
		System.out.println("A test1");
	}
	public void test2() {
		System.out.println("A test2");
	}
}
zhjh1111 2014-08-08
  • 打赏
  • 举报
回复
package com.test;

public class A {
	public int test1(int i) {
		System.out.println("A test1");
		return 0;
	}
	public void test2() {
		System.out.println("A test2");
	}
}
zhjh1111 2014-08-08
  • 打赏
  • 举报
回复
package com.test;

import java.lang.reflect.Method;

public class B extends A {
	@Override
	public void test1(int i) {
		System.out.println("B test1");
	}
	public void test2() {
		System.out.println("B test2");
	}
	public void test3() {
		System.out.println("B test3");
	}
	public static void main(String[] args) {
		B b = new B();
		Method[] bfs = b.getClass().getDeclaredMethods();
		Method[] afs = b.getClass().getSuperclass().getDeclaredMethods();
		for(Method bm : bfs) {
			for(Method am : afs) {
				if(bm.getName().equals(am.getName()) && 
						bm.getReturnType().equals(am.getReturnType())) {
					Class[] bc = bm.getParameterTypes();
					Class[] ac = am.getParameterTypes();
					if(bc.length == ac.length) {
						boolean isEqual = true;
						for(int i=0;i<bc.length;i++) {
							if(!bc[i].equals(ac[i])) {
								isEqual = false;
								break;
							}
						}
						if(isEqual) {
							System.out.println(b.getClass()+" has method " + bm.getName() + 
									" override " + b.getClass().getSuperclass());
						}
					}
				}
			}
		}
	}
}
will200811 2014-08-08
  • 打赏
  • 举报
回复
通过反射获得子类拥有的方法,然后根据一定的准则去判断即可。
rumlee 2014-08-08
  • 打赏
  • 举报
回复
我觉得这应该没有任何方法可以做到(除了分析源代码之外)。 而且如果你有这样的需求的话,那只能说明设计有问题。破坏了面向对象的一些设计的基本原则。 否则设计者就应该考虑在将父类的该方法设计成abstract方法,或者是父类的默认实现是抛出异常。

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧