Questions tagged «overriding»

在面向对象程序设计中,方法重写是一种语言功能,它允许子类或子类提供其超类或父类之一已经提供的方法的特定实现。


12
将项目导入Eclipse之后,“必须重写超类方法”错误
每当我必须将我的项目重新导入到Eclipse中(如果我重新安装了Eclipse或更改了项目的位置)时,几乎所有覆盖的方法都未正确格式化,从而导致错误: 该方法必须重写超类方法 值得注意的是,无论出于何种原因,这都是在Android项目中使用的,方法参数值并不总是填充的,因此我必须自己手动填充它们。例如: list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { //These arguments have their correct names public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { } }); 最初将这样填充: list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { //This methods arguments were not automatically provided public void onCreateContextMenu(ContextMenu arg1, View arg2, ContextMenuInfo arg3) { } }); 奇怪的是,如果我删除代码,并让Eclipse自动重新创建该方法,它将使用与我已经拥有的参数名称相同的名称,因此我真的不知道问题出在什么地方,否则它将为该方法自动格式化我。 必须手动手动重新创建所有我覆盖的方法,这变得非常痛苦。如果有人可以解释为什么会发生或如何解决。我会很高兴的。 也许是由于我格式化方法的方式所致,而该方式位于另一个方法的参数内?



21
多态性vs覆盖vs重载
就Java而言,当有人问: 什么是多态性? 将超载或重载是一个可以接受的答案? 我认为还有更多。 如果您有一个抽象基类,它定义了一个没有实现的方法,并且您在子类中定义了该方法,那该方法是否仍然覆盖? 我认为 过载不是肯定的正确答案。

7
如果我要重写基类的虚函数,可以调用它吗?
假设我有课程,Foo并且Bar设置如下: class Foo { public: int x; virtual void printStuff() { std::cout << x << std::endl; } }; class Bar : public Foo { public: int y; void printStuff() { // I would like to call Foo.printStuff() here... std::cout << y << std::endl; } }; 如代码中所注释,我希望能够调用我要重写的基类的函数。在Java中有super.funcname()语法。这在C ++中可能吗?

10
覆盖后退按钮以充当主页按钮
在按下后退按钮时,我希望我的应用程序进入停止状态,而不是进入销毁状态。 在Android 文档中,它指出: ...并非所有活动都具有按下BACK后会被销毁的行为。当用户开始在“音乐”应用程序中播放音乐,然后按BACK时,该应用程序将覆盖正常的后退行为,从而防止播放器活动被破坏,并继续播放音乐(即使其活动不再可见) 如何在自己的应用程序中复制此功能? 我认为肯定有三种可能性... 捕获后退按钮的按下(如下所示),然后调用home按钮调用的任何方法。 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); } 捕获后退按钮按下,然后欺骗主页按钮。 捕获后退按钮的按下,然后启动主屏幕的活动,从而有效地将应用程序的活动置于停止状态。 编辑: 我知道有关服务,并且正在与此问题相关的应用程序中使用一种。该问题专门用于在按“后退”按钮时将“活动”置于停止状态而不是被破坏状态。







14
新和替代之间的区别
想知道以下内容之间有什么区别: 情况1:基类 public void DoIt(); 情况1:继承的类 public new void DoIt(); 情况2:基类 public virtual void DoIt(); 情况2:继承的类 public override void DoIt(); 根据我运行的测试,案例1和案例2似乎具有相同的效果。有区别还是首选方式?

5
在Ruby on Rails中重写setter方法的正确方法是什么?
我正在使用Ruby on Rails 3.2.2,并且我想知道以下内容是否是“正确” /“正确” /“确定”方式来覆盖我的class属性的setter方法。 attr_accessible :attribute_name def attribute_name=(value) ... # Some custom operation. self[:attribute_name] = value end 上面的代码似乎按预期工作。但是,我想知道,通过使用上面的代码,将来我是否会遇到问题,或者至少会遇到Ruby on Rails“我期望” /“可能发生”的问题。如果那不是重写setter方法的正确方法,那么正确的方法是什么? 注意:如果我使用代码 attr_accessible :attribute_name def attribute_name=(value) ... # Some custom operation. self.attribute_name = value end 我收到以下错误: SystemStackError (stack level too deep): actionpack (3.2.2) lib/action_dispatch/middleware/reloader.rb:70

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.