谁叫我超级班?

时间:2014-02-05 18:53:55

标签: java android superclass super

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

有人有想法吗?

4 个答案:

答案 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。