2014-02-05 146 views
0

我有一个5类,他们都扩展一个BaseClass。如果在我的基类中正在执行一个方法,我想知道5个类中的哪一个在我的基类中调用了该方法。我认为我无法在超级通话中传递变量。这是一个android项目,这个调用是预定义的。我宁愿在我的BaseClass中调用类似“getCallingClass”或类似的东西。谁叫我的超级班?

任何想法?

+0

你的意思是......谁调用的方法或什么类型的对象调用的方法? –

回答

1

你可以做this.getClass();来获得调用对象的类。

您可以通过this.getClass().getName()获取课程名称。

否则,您可以使用instanceof运算符来检查调用对象属于哪个类。

所以在你的基类的功能,你可以简单地检查:

if(this instanceof ClassA){ 

} 
0

通常在基类中你不应该需要知道
其子类执行/调用当前方法。
如果你需要知道,那么你做的事情不是
很对,你应该想你为什么需要知道它。

0

你的基类的所有五个孩子继承自己父母的方法版本,不包括私人的方法或构造函数。如果class Fooextendsclass Bar,那么Bar中的每个非私有方法也都在Foo中。

调用this.getClass();会给你你目前所在的任何课程。如果你在Foo里面调用它,你会得到Foo。如果你把它叫做Bar,你会得到Bar。如果Foo继承了Bar中的方法,那么您仍然是该方法中的Foo。

+0

这部分'然后在酒吧的每个方法也是美孚,除非它是overwritten'不是私有方法真的,我想。另外,构造函数不会被继承。 –

+0

@ peter.petrov你是对的。修复了答案。 – Rainbolt

1

超类的方法不应该依赖诸如哪个子类调用它的信息。如果你打算根据哪个子类调用它,那么这个逻辑应该在子类中,而不是在超类中。

覆盖子类中的方法,调用父类方法明确,然后加上自己的具体子类的逻辑。

超类:

public void aMethod() { 
    // do superclass logic here. 
} 

子类:

@Override 
public void aMethod() { 
    super.aMethod(); 
    // Subclass-specific logic goes in the overriding method. 
}