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中的多态解释吗? 展开
是
调用的父类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中的多态解释吗? 展开
展开全部
重写父类方法后,要调用父类的方法需要加super,显示指定调用父类。
这和android没有关系,主要是java的语法。
示例:
public class P{
public void show(){
}
}
public class S extends P{
public void show(){
super.show();//这里显示指定调用父类的show方法,不加super,只会调用子类的方法
}
}
本问题解决:
所以这里加了super.onKeyDown后,调用的就是父类的onKeyDown方法。
展开全部
return super.onKeyDown(keyCode, msg)这一句调用的是父类的方法
其次,在手机上操作的时候,调用的是TestKeyEvent中的onKeyDown,在最后一句执行return的时候又执行了父类的onKeyDown
如果不需要执行父类的onKeyDown,可以根据情况直接return true或者false return true表示事件处理完毕,不继续传递,return false 表示时间继续传递给父元素
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这就是java。
不要把android看得太神奇,它就相当于一个庞大的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);
父类方法不显式调用,父类就不会执行
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |