我有一个5类,他们都扩展一个BaseClass。如果在我的基类中正在执行一个方法,我想知道5个类中的哪一个在我的基类中调用了该方法。我认为我无法在超级通话中传递变量。这是一个android项目,这个调用是预定义的。我宁愿在我的BaseClass中调用类似“getCallingClass”或类似的东西。谁叫我的超级班?
任何想法?
我有一个5类,他们都扩展一个BaseClass。如果在我的基类中正在执行一个方法,我想知道5个类中的哪一个在我的基类中调用了该方法。我认为我无法在超级通话中传递变量。这是一个android项目,这个调用是预定义的。我宁愿在我的BaseClass中调用类似“getCallingClass”或类似的东西。谁叫我的超级班?
任何想法?
你可以做this.getClass();
来获得调用对象的类。
您可以通过this.getClass().getName()
获取课程名称。
否则,您可以使用instanceof运算符来检查调用对象属于哪个类。
所以在你的基类的功能,你可以简单地检查:
if(this instanceof ClassA){
}
通常在基类中你不应该需要知道
其子类执行/调用当前方法。
如果你需要知道,那么你做的事情不是
很对,你应该想你为什么需要知道它。
你的基类的所有五个孩子继承自己父母的方法版本,不包括私人的方法或构造函数。如果class Foo
extends
class Bar
,那么Bar中的每个非私有方法也都在Foo中。
调用this.getClass();
会给你你目前所在的任何课程。如果你在Foo里面调用它,你会得到Foo。如果你把它叫做Bar,你会得到Bar。如果Foo继承了Bar中的方法,那么您仍然是该方法中的Foo。
这部分'然后在酒吧的每个方法也是美孚,除非它是overwritten'不是私有方法真的,我想。另外,构造函数不会被继承。 –
@ peter.petrov你是对的。修复了答案。 – Rainbolt
超类的方法不应该依赖诸如哪个子类调用它的信息。如果你打算根据哪个子类调用它,那么这个逻辑应该在子类中,而不是在超类中。
覆盖子类中的方法,调用父类方法明确,然后加上自己的具体子类的逻辑。
超类:
public void aMethod() {
// do superclass logic here.
}
子类:
@Override
public void aMethod() {
super.aMethod();
// Subclass-specific logic goes in the overriding method.
}
你的意思是......谁调用的方法或什么类型的对象调用的方法? –