java - 获取对调用父类(super class)方法的对象的引用

原文 标签 java polymorphism

我正在尝试编写一个抽象类。在那个类中,我有一个方法应该访问调用该方法的实际对象。
然而,“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 引用的实例访问该类的任何属性或方法。

但是,转换 this 引用的实例,这不是一个好的设计实践。笼统地说,您应该在 MyClass 中编写一个具有一般行为的 foo 方法,并用每个类的特定行为覆盖它。如果要使用父类的 foo 方法,可以使用 super 调用它。 .

关于java - 获取对调用父类(super class)方法的对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374162/

相关文章:

java - IntelliJ 中的 Grails 默认内存设置

java - 如何使用房间数据库从 LiveData 列表中检索用户以显示在 Spinner 中

typescript - Angular2 多态嵌套组件在单独的文件中中断

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - 文件传输后无法读取Java套接字消息

java - 在 JOptionPane.showOptionDialog 中使用 Arraylist 作为消息

java - 按值获取字段

c++ - 在没有 RTTI 的情况下比较 C++ 中的多态基类型

haskell - 打字判断有种类吗?

java - 我的问题很简单,这里 x 的值返回 5 但是为什么这背后的原因是什么