我有5个类,它们都扩展了BaseClass。如果在我的基类中正在执行一个方法,我想知道在我的基类中调用该方法的5个类中的哪一个。我认为我无法在超级通话中传递变量。这是一个Android项目,调用是预定义的。我想在我的BaseClass中我可以调用类似“getCallingClass”之类的东西。
有人有想法吗?
答案 0 :(得分:1)
你可以this.getClass();
来获取调用对象的类。
您可以按this.getClass().getName()
获取课程名称。
否则你可以使用instanceof运算符来检查调用对象属于哪个类。
所以在您的基类函数中,您只需检查:
if(this instanceof ClassA){
}
答案 1 :(得分:1)
超类的方法不应该依赖于哪个子类调用它等信息。如果要基于哪个子类调用它来做某事,那么该逻辑应该在子类中,而不是在超类中。
重写子类中的方法,显式调用超类方法,然后添加自己的子类特定逻辑。
超类:
public void aMethod() {
// do superclass logic here.
}
子类:
@Override
public void aMethod() {
super.aMethod();
// Subclass-specific logic goes in the overriding method.
}
答案 2 :(得分:0)
通常在基类中你不需要知道
哪个子类正在执行/调用当前方法
如果你需要知道,那么你正在做的事情不是
非常正确,你应该想到为什么你需要知道它。
答案 3 :(得分:0)
基类的所有五个子类都继承自己父级方法的版本,不包括私有方法或构造函数。如果class Foo
extends
class Bar
,那么Bar中的每个非私有方法也都在Foo中。
调用this.getClass();
将为您提供当前所在的课程。如果你在Foo中调用它,你会得到Foo。如果你在Bar里面打电话,你会得到Bar。如果Foo继承了一个存在于Bar中的方法,那么你仍然会成为该方法中的一个Foo。