我正在尝试编写一个抽象类。在该类中,我有一个方法,该方法应该访问调用该方法的实际对象。 然而,“this”只会返回我自己编写的“对象的一部分”(抽象的)。
要指定更多内容: 如果我正在编写的方法有一个我的类类型的参数,我想要的看起来像这样:
public abstract class MyClass {
public void foo(MyClass invoker) {
...
}
}
上面的代码将允许我访问调用该方法的对象,但是像这样编写它会很乏味,因为这应该成为我想提供给其他人的库的一部分,而我无法确定,传递的参数实际上是正确的对象,而不是从 MyClass 派生的类的其他对象。
是否有一种方法可以按照 getNestingObject() 的方式调用某些内容,或者我是否必须专门为该方法提供一个参数并不断为每次调用推断“this”?
最后,由于我不是java大师,一个可能不太明显的问题: 是否存在安全原因,为什么上述概念存在缺陷?有人可以吗 恶意滥用此类关键字?
最佳答案
I am trying to write an abstract class. In that class I have a method which is supposed to access the actual object for which the method is called. "this" however will only return the "part of the object" that I write myself (the abstract one).
this
将返回对“整个”对象的引用,而不是“一部分”。为了证明这一点,如果将此引用强制转换为层次结构中较低的类,则可以使用此引用的实例来访问此类的任何属性或方法。
但是,转换 this
引用的实例并不是一个好的设计实践。一般来说,您应该在 MyClass 中编写具有一般行为的 foo 方法,并使用每个类的特定行为覆盖它。如果想使用父类的foo方法,可以使用super
调用。
关于java - 获取对调用父类(super class)方法的对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374162/