关于基类继承类的调用有关问题(有二个贴子,共80分)
关于基类继承类的调用问题(有二个贴子,共80分)
关于基类继承类的调用问题, 请转到以下这个贴子. (以下这个贴子另有40分)
http://bbs.****.net/topics/390942554
DefaultSyncManager.java.....................................
public class DefaultSyncManager extends Handler {
private static DefaultSyncManager sManager;
public static DefaultSyncManager init(Context context) {
Log.v("AAA", ".............DefaultSyncManager..init..");
sManager = new SyncManagerExt(context);
// sManager = new DefaultSyncManager(context);
}
public static DefaultSyncManager getDefault() {
Log.v("AAA", "...........DefaultSyncManager..getDefault....");
return sManager;
}
public int request(Config config, ArrayList<Projo> datas) {
Log.v("AAA", "...........DefaultSyncManager..request...0..0..");
return request(config, datas, false);
}
int request(final Config config, final ArrayList<Projo> datas, final boolean sync) {
Log.v("AAA", "...........DefaultSyncManager..request...0..1..");
}
}
SyncManagerExt.java.............................................
public class SyncManagerExt extends DefaultSyncManager implements TransportManagerExt.OnRetriveCallback {
@Override
int request(Config config, ArrayList<Projo> datas, boolean sync) {
Mgr.w("..... ....SyncManagerExt..request()..." );
}
}
QuickSmsSettings.java...............................................
import cn.ingenic.indroidsync.DefaultSyncManager;
public class QuickSmsSettings extends PreferenceActivity implements
Preference.OnPreferenceChangeListener,
Preference.OnPreferenceClickListener {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
DefaultSyncManager.getDefault().request(config, datas);
}
@Override
public boolean onPreferenceClick(Preference preference) {
Log.v("BBB", "...........QuickSmsSettings..onPreferenceClick..request()..");
DefaultSyncManager.getDefault().request(config, datas);
}
}
////................................串口信息..............................................
V/BBB ( 3446): ...........QuickSmsSettings..onPreferenceClick..request()..
V/AAA ( 3446): ...........DefaultSyncManager..getDefault....
V/AAA ( 3446): ...........DefaultSyncManager..request...0..0..
W/Sync ( 3446): <Manager>..... ....SyncManagerExt..request()...
V/AAA ( 3446): .............DefaultSyncManager..getLockedAddress..
E/Sync ( 3446): <Manager>.............DefaultSyncManager..getLockedAddress..1..
问题1: QuickSmsSettings.java 中, 没有定义DefaultSyncManager 这个变量,它为什么可以直接使用? (类DefaultSyncManager 也有继承类)
问题2: QuickSmsSettings.java 中的点击事件,调用 DefaultSyncManager.getDefault().request(config, datas), 先调用基类中的request(), 再调用继承类的request().
这个好理解, 但是
基类中的 request(xxx, xxx) 为什么没有调用到基类中的 request(xxx, xxx, xxx)? (以下二个函数)
public int request(Config config, ArrayList<Projo> datas) {
Log.v("AAA", "...........DefaultSyncManager..request...0..0..");
return request(config, datas, false);
}
int request(final Config config, final ArrayList<Projo> datas, final boolean sync) {
Log.v("AAA", "...........DefaultSyncManager..request...0..1..");
}
------解决思路----------------------
public class SyncManagerExt extends DefaultSyncManager {
protected SyncManagerExt(Context context) {
super(context);
Log.v("AAA", "..... ....SyncManagerExt()...");
}
@Override
public int request(String config, String datas, boolean sync) {
Log.v("AAA", "..... ....SyncManagerExt..request()...");
return 1;
}
}
public class DefaultSyncManager {
private static DefaultSyncManager sManager;
protected DefaultSyncManager(Context context)
{
Log.v("AAA", ".............DefaultSyncManager()....");
}
public DefaultSyncManager getDefault() {
Log.v("AAA", "...........DefaultSyncManager..getDefault....");
return sManager;
}
public int request(String config, String datas)
{
Log.v("AAA", "...........DefaultSyncManager..request...0..0..");
return request(config, datas, false);
}
public int request(String config, String datas, boolean sync)
{
Log.v("AAA", "...........DefaultSyncManager..request...0..1..");
return 1;
}
}
DefaultSyncManager mDefaultSyncManager;
//SyncManagerExt mDefaultSyncManager;
String config = "11111";
String datas = "22222";
public void onCreate(Bundle savedInstanceState) {
Log.v("AAA", "........onCreate..");
//mDefaultSyncManager = new DefaultSyncManager(null);
mDefaultSyncManager = new SyncManagerExt(null);
public void onClick(View v) {
mDefaultSyncManager.request(config, datas, false);
}
}
情况1: 以下这样点击时,直接调用 SyncManagerExt 中的 三个参数的request()
public void onClick(View v) {
mDefaultSyncManager.request(config, datas, false);
}
情况2: 以下这样点击时,调用 DefaultSyncManager 中的 二个参数的request() --> SyncManagerExt 中三个参数的 request()
public void onClick(View v) {
mDefaultSyncManager.request(config, datas);
}
java 中,重载是多态性的表现方式之一.
关于基类继承类的调用问题, 请转到以下这个贴子. (以下这个贴子另有40分)
http://bbs.****.net/topics/390942554
DefaultSyncManager.java.....................................
public class DefaultSyncManager extends Handler {
private static DefaultSyncManager sManager;
public static DefaultSyncManager init(Context context) {
Log.v("AAA", ".............DefaultSyncManager..init..");
sManager = new SyncManagerExt(context);
// sManager = new DefaultSyncManager(context);
}
public static DefaultSyncManager getDefault() {
Log.v("AAA", "...........DefaultSyncManager..getDefault....");
return sManager;
}
public int request(Config config, ArrayList<Projo> datas) {
Log.v("AAA", "...........DefaultSyncManager..request...0..0..");
return request(config, datas, false);
}
int request(final Config config, final ArrayList<Projo> datas, final boolean sync) {
Log.v("AAA", "...........DefaultSyncManager..request...0..1..");
}
}
SyncManagerExt.java.............................................
public class SyncManagerExt extends DefaultSyncManager implements TransportManagerExt.OnRetriveCallback {
@Override
int request(Config config, ArrayList<Projo> datas, boolean sync) {
Mgr.w("..... ....SyncManagerExt..request()..." );
}
}
QuickSmsSettings.java...............................................
import cn.ingenic.indroidsync.DefaultSyncManager;
public class QuickSmsSettings extends PreferenceActivity implements
Preference.OnPreferenceChangeListener,
Preference.OnPreferenceClickListener {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
DefaultSyncManager.getDefault().request(config, datas);
}
@Override
public boolean onPreferenceClick(Preference preference) {
Log.v("BBB", "...........QuickSmsSettings..onPreferenceClick..request()..");
DefaultSyncManager.getDefault().request(config, datas);
}
}
////................................串口信息..............................................
V/BBB ( 3446): ...........QuickSmsSettings..onPreferenceClick..request()..
V/AAA ( 3446): ...........DefaultSyncManager..getDefault....
V/AAA ( 3446): ...........DefaultSyncManager..request...0..0..
W/Sync ( 3446): <Manager>..... ....SyncManagerExt..request()...
V/AAA ( 3446): .............DefaultSyncManager..getLockedAddress..
E/Sync ( 3446): <Manager>.............DefaultSyncManager..getLockedAddress..1..
问题1: QuickSmsSettings.java 中, 没有定义DefaultSyncManager 这个变量,它为什么可以直接使用? (类DefaultSyncManager 也有继承类)
问题2: QuickSmsSettings.java 中的点击事件,调用 DefaultSyncManager.getDefault().request(config, datas), 先调用基类中的request(), 再调用继承类的request().
这个好理解, 但是
基类中的 request(xxx, xxx) 为什么没有调用到基类中的 request(xxx, xxx, xxx)? (以下二个函数)
public int request(Config config, ArrayList<Projo> datas) {
Log.v("AAA", "...........DefaultSyncManager..request...0..0..");
return request(config, datas, false);
}
int request(final Config config, final ArrayList<Projo> datas, final boolean sync) {
Log.v("AAA", "...........DefaultSyncManager..request...0..1..");
}
------解决思路----------------------
public class SyncManagerExt extends DefaultSyncManager {
protected SyncManagerExt(Context context) {
super(context);
Log.v("AAA", "..... ....SyncManagerExt()...");
}
@Override
public int request(String config, String datas, boolean sync) {
Log.v("AAA", "..... ....SyncManagerExt..request()...");
return 1;
}
}
public class DefaultSyncManager {
private static DefaultSyncManager sManager;
protected DefaultSyncManager(Context context)
{
Log.v("AAA", ".............DefaultSyncManager()....");
}
public DefaultSyncManager getDefault() {
Log.v("AAA", "...........DefaultSyncManager..getDefault....");
return sManager;
}
public int request(String config, String datas)
{
Log.v("AAA", "...........DefaultSyncManager..request...0..0..");
return request(config, datas, false);
}
public int request(String config, String datas, boolean sync)
{
Log.v("AAA", "...........DefaultSyncManager..request...0..1..");
return 1;
}
}
DefaultSyncManager mDefaultSyncManager;
//SyncManagerExt mDefaultSyncManager;
String config = "11111";
String datas = "22222";
public void onCreate(Bundle savedInstanceState) {
Log.v("AAA", "........onCreate..");
//mDefaultSyncManager = new DefaultSyncManager(null);
mDefaultSyncManager = new SyncManagerExt(null);
public void onClick(View v) {
mDefaultSyncManager.request(config, datas, false);
}
}
情况1: 以下这样点击时,直接调用 SyncManagerExt 中的 三个参数的request()
public void onClick(View v) {
mDefaultSyncManager.request(config, datas, false);
}
情况2: 以下这样点击时,调用 DefaultSyncManager 中的 二个参数的request() --> SyncManagerExt 中三个参数的 request()
public void onClick(View v) {
mDefaultSyncManager.request(config, datas);
}
java 中,重载是多态性的表现方式之一.