这是我的情况:
class SomeBaseClass
{
public void foo(String str)
{
.......
}
public void foo(String strs[])
{
.......
}
}
class MyClass extends SomeBaseClass
{
public void foo(String str)
{
super.foo(str);
}
public void foo(String strs[])
{
throw new RuntimeException("only one input please!");
}
}
逻辑很简单。“ SomeBaseClass”是我无法修改的第三方工具。我想限制其功能,并且不想允许foo(String strs [])。
问题是在SomeBaseClass内部foo(Sting str)内部调用foo(String strs
[])。因此,当我调用MyClass的foo(String
str)时,出现运行时异常。我该如何告诉SomeBaseClassclass使用SomeBaseClass :: foo(String strs
[])和所有其他类使用MyClass :: foo(String strs [])
也许是在engg上,但是在内部,MyClass.foo(String strs[])
您可以检查呼叫者是否SomeBaseClass.foo(String str)
,如果是,则将呼叫转到super.foo(String)
其他地方throw RuntimeException
。
要查找来电者检查StackTrace
。
问题内容: 下面的代码在运行时显然会打印出“ B1 / A2 / B2”。现在,是否可以改为打印“ A1 / A2 / B2”(即A#method2()应该在A而不是B上调用method1())? 注意:我不需要获得传递多态性,这个问题仅出于好奇。 问题答案: 是的,您可以做到。在包 a中 定义A : 在包 b中 定义B : 将测试放入软件包 a中 并运行它。结果是A1 / A2 / B2。当然这
下面是一个示例项目:http://cl.ly/3N2u2i1S441M 我在一个UITableViewCell超类中,因为当子类被初始化时,我调用super。init()。在子类和超类的init的底部,我调用了一个方法,调用styleCell,对其应用样式。该方法来自于它们都符合的协议,其中一个隐式符合,因为它是子类,并且覆盖了该方法。 在超类'的末尾,调用该样式方法,但它调用子类'方法,而不是它
问题内容: 我正在寻找此代码将输出: 但是我得到了: 我了解在B的上下文中,A.f1(String)中的“ this”是B的实例。我是否可以选择执行新的链B1()。f1(String)->(A’s)f1(String)->(A’s)f1(int,String)? 这是一个理论问题,实际上,解决方案显然是在A中实现f1(String)和f1(int,String)都将调用的私有函数。 谢谢你, 马克
问题内容: 在讨论元类时,文档指出: 当然,您也可以覆盖其他类方法(或添加新方法)。例如,在元类中定义自定义方法可在调用类时允许自定义行为,例如,并非总是创建新实例。 我的问题是:假设我想在调用类时具有自定义行为,例如缓存而不是创建新对象。我可以通过重写类的方法来做到这一点。什么时候我想用它定义一个元类?这种方法带来了什么是无法实现的? 问题答案: 直接回答你的问题是:当你想要做 更多的 不仅仅是
问题内容: 让我们看一下这段代码: 我希望这能打印出“孩子”,但结果是“父母”。为什么Java会改为调用父类,我该怎么做才能使其在子类中调用方法? 问题答案: 不会覆盖,因为它没有相同的形式参数。一个拿走,另一个拿走。因此,运行时的多态不会被应用,并且不会导致子类方法的执行。根据Java语言规范: 如果满足以下所有条件,则在类C中声明或由类C继承的实例方法从类C中 重写 另一个在类A中声明的方法:
来自java教程 > 与实例的超类相同的包中的子类可以覆盖任何未声明为私有或最终的超类方法。 不同包中的子类只能重写声明为public或protected的非final方法。 但有什么区别?如果一个方法没有声明为private,那么它必须是public还是protected no?