Android中关于重写方法调用父类方法的问题

这里的returnsuper.onKeyDown(keyCode,msg)最后是调用的父类Activity中的onKeyDown()还是调用的子类TestKeyEvent... 这里的return super.onKeyDown(keyCode, msg)最后

调用的父类Activity中的onKeyDown()
还是
调用的子类TestKeyEvent中重写的onKeyDown()?
如果调用的是子类重写的方法onKeyDown(),那么可以用java中的多态解释吗?import

android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.ImageView;
import android.os.Debug;

public class TestKeyEvent extends Activity {
private static final String TAG = "TestKeyEvent";
private ImageView mImage;
private TextView mAlphavalueText;
private int mAlphavalue;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testkeyevent);
mImage = (ImageView) findViewById(R.id.image);
mAlphavalueText = (TextView) findViewById(R.id.alphavalue);
mAlphavalue = 0xff;
mImage.setAlpha(mAlphavalue);
mAlphavalueText.setText("Alpha = " + mAlphavalue*100/0xff + "%");
}
@Override
protected void onDestroy() {
super.onDestroy();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent msg){
Log.v(TAG, "onKeyDown: keyCode = "+ keyCode);
Log.v(TAG, "onKeyDown: String = " + msg.toString());

switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_RIGHT:
mAlphavalue += 20;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_LEFT:
mAlphavalue -= 20;
break;
default:
break;
}
if(mAlphavalue>=0xFF)mAlphavalue = 0xFF;
if(mAlphavalue<=0x0)mAlphavalue = 0x0;
mImage.setAlpha(mAlphavalue);
mAlphavalueText.setText("Alpha = " + mAlphavalue*100/0xff + "%");
return super.onKeyDown(keyCode, msg);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent msg){
Log.v(TAG, "onKeyUp: keyCode = "+ keyCode);
Log.v(TAG, "onKeyUp: String = " + msg.toString());
return super.onKeyUp(keyCode, msg);
}
}

这里的return super.onKeyDown(keyCode, msg)最后

调用的父类Activity中的onKeyDown()
还是
调用的子类TestKeyEvent中重写的onKeyDown()?
如果调用的是子类重写的方法onKeyDown(),那么可以用java中的多态解释吗?
展开
 我来答
woshidaniel
推荐于2016-02-28 · TA获得超过9240个赞
知道小有建树答主
回答量:1760
采纳率:96%
帮助的人:954万
展开全部

重写父类方法后,要调用父类的方法需要加super,显示指定调用父类。

这和android没有关系,主要是java的语法。

示例:

public class P{
   public void show(){
   }
}
public class S extends P{
   public void show(){
      super.show();//这里显示指定调用父类的show方法,不加super,只会调用子类的方法
   }
}

本问题解决:

所以这里加了super.onKeyDown后,调用的就是父类的onKeyDown方法。

深海大龙虾爷
2015-08-17 · TA获得超过608个赞
知道小有建树答主
回答量:478
采纳率:37%
帮助的人:185万
展开全部
  1. return super.onKeyDown(keyCode, msg)这一句调用的是父类的方法

  2. 其次,在手机上操作的时候,调用的是TestKeyEvent中的onKeyDown,在最后一句执行return的时候又执行了父类的onKeyDown

  3. 如果不需要执行父类的onKeyDown,可以根据情况直接return true或者false               return true表示事件处理完毕,不继续传递,return false 表示时间继续传递给父元素

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ykhotdog
推荐于2018-03-09 · 超过46用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:84万
展开全部
这就是java。
不要把android看得太神奇,它就相当于一个庞大的java框架而已
追问
这里的return super.onKeyDown(keyCode, msg)最后

调用的父类Activity中的onKeyDown()
还是
调用的子类TestKeyEvent中重写的onKeyDown()?
追答
它会调用子类TestKeyEvent中重写的onKeyDown()

但是你的重写里面自己本身又掉用了return super.onKeyDown(keyCode, msg);

所以父类的也会被执行。如果把return super.onKeyDown(keyCode, msg);改成return true(false);
父类方法不显式调用,父类就不会执行
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式