【发布时间】:2013-08-19 03:18:25
【问题描述】:
假设我有一个名为 SuperClass 的类:
public class SuperClass
{
protected void TheCake()
{
System.out.println("The cake is a lie");
}
}
还有一个叫SubClass:
public class SubClass extends SuperClass
{
@Override
protected void TheCake()
{
System.out.println("The cake is not a lie");
}
}
在第三堂课我有这个方法
public void GetCake(SuperClass someObject)
{
Class clazz = someObject.getClass();
Method method = clazz.getMethod("TheCake");
method.invoke(someObject, (Object[])null));
}
这永远不会奏效,因为 TheCake 受到保护。所以如果我改变这一行:
Method method = clazz.getMethod("TheCake");
到这里:
Method method = clazz.getDeclaredMethod("TheCake");
只有当 someObject 是 SuperClass 的实例时它才有效,如果它是 SubClass 的实例则失败,因为当然方法是在 SuperClass 中声明的。
但是如果我这样做呢?
public void GetCake(SuperClass someObject)
{
Class clazz = SuperClass.class;
Method method = clazz.getDeclaredMethod("TheCake");
method.invoke(someObject, (Object[])null));
}
如果 someObject 是 SubClass 的一个实例,会调用什么方法?方法的 SuperClass 定义还是方法的 SubClass 覆盖?
【问题讨论】:
-
当你尝试它会发生什么?
-
尝试一下似乎比输入整个问题更容易找到答案:-)
-
我不能尝试,因为我不在学校,而且我家里的 java 开发环境是我父亲的,它的项目包杂乱无章,而且害怕搞砸。我不擅长java,我对语言理解得很好,但我没有使用IDE的经验,我只需要java,因为我在学校有关于它的课程。 C# 更适合我。
-
您可以通过将代码放入 .java 文件并在命令行中编译它们,在 IDE 之外尝试一下。
-
这是个好主意,我会看看如何做到这一点。
标签: java inheritance reflection overriding protected