我想知道继承类的反射是如何工作的?在我的超类构造函数中,这些方法似乎不是反射可用的。
如果我有一个子类"马"的"动物",是否有可能访问"马"的方法使用反射当我在"动物"超类的构造函数?看来并非如此。
SuperClass构造函数总是在子类的构造函数之前运行。因此,子类的实例永远不会处于就绪状态。
不可能吗,因为动物的构造函数体在构造函数马的构造函数体之前被调用。对象的马'部分'还不存在
父类的actor(或其他任何东西)不应该访问特定于子类的方法;父类不应该知道从它派生的类的任何信息。
对于这个问题,超类不应该调用由子类在其actor中定义的方法,因为对象还没有初始化。这里有一些关于这方面的讨论,并附有示例。如果你有一个马的实例,不管你在哪里(包括在Animal构造函数中),你都可以访问该实例的所有方法/字段。
然而,如果你是在一个普通的动物或其他子类,你不能访问方法/字段的马,因为它不是一个马
是,不是。通过反射API,如果你在构造函数中,你可以访问子类(或任何类)的方法。从好的实践角度来说,没有,因为动物不是马。
需要注意的是java加载类的方式:首先加载超类,然后加载子类。
如果您需要访问特定于子类的方法,则必须找到另一种方法。
例如,一种策略是使用接口或继承....将子类正在实现的一些契约嵌入到父类中