关于基类继承类的调用有关问题(有二个贴子,共80分)

关于基类继承类的调用问题(有二个贴子,共80分)
本帖最后由 shenzhentom 于 2014-12-01 13:34:44 编辑
关于基类继承类的调用问题, 请转到以下这个贴子. (以下这个贴子另有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 中,重载是多态性的表现方式之一.