我正在尝试编写一个抽象类。在那个类中,我有一个方法,它应该访问调用该方法的实际对象。 然而,“这”只会返回我自己写的“对象的一部分”(抽象的)。
指定更多: 如果我写的方法有一个类我的类的参数,我想要的是这样的:
public abstract class MyClass {
public void foo(MyClass invoker) {
...
}
}
上面的代码允许我访问调用该方法的对象,但是这样编写它会很繁琐,因为这应该成为我想要提供给其他人的库的一部分而我无法确定,传递的参数实际上是正确的对象,而不是从MyClass派生的类的其他对象。
有没有办法按照getNestingObject()的方式调用某些东西,或者我是否必须给该方法一个参数并不断向每次调用推断“this”?
最后,由于我不是java中的高手,这个问题可能不太明显: 是否存在安全原因,为什么上述概念存在缺陷?有人可以 恶意企图滥用那种关键词?
答案 0 :(得分:1)
我正在尝试编写一个抽象类。在那堂课里,我有一个方法 应该访问该方法所针对的实际对象 调用。然而“这”只会返回“对象的一部分” 我自己写(抽象的)。
this
将返回对“整个”对象的引用,而不是“部分”。为了证明这一点,如果将此引用强制转换为层次结构中较低的类,则可以使用此引用的实例访问此类的任何属性或方法。
但是,强制转换this
引用的实例并不是一个好的设计实践。一般来说,你应该在MyClass中用一般行为编写一个foo方法,并用每个类的特定行为覆盖它。如果要使用父类的foo方法,可以使用super
调用它。