Summary
关于extends abstract类的方法调用问题。
abstract public class GTYAbstDbTable extends Object
{
public String getSqlSelectStat()
{
String strSql = null;
strSql = sqlCreateSelectStat();
return strSql;
}
protected String sqlCreateSelectStat()
{
System.out.println("enter sqlCreateSelectStat");
StringBuffer sbSQL = new StringBuffer();
…
return sbSQL.toString();
}
}
public class DbGtyGtmUserid extends GTYAbstDbTable
{
protected String sqlCreateSelectStat()
{
StringBuffer sbSQL = new StringBuffer();
…
return sbSQL.toString();
}
}
public class A
{
DbGtyGtmUserid app = new DbGtyGtmUserid();
strSql = app.getSqlSelectStat();
}
在WSAD一路跟踪(F3)的结果:A-> GTYAbstDbTable.getSqlSelectStat()->GTYAbstDbTable.sqlCreateSelectStat()
实际应该是:A-> GTYAbstDbTable.getSqlSelectStat()->DbGtyGtmUserid.sqlCreateSelectStat()
问题是:为什么abstract类会去掉用子类的方法?
扩展:
如果还有一个类C extends GTYAbstDbTable
public class C extends GTYAbstDbTable
{
protected String sqlCreateSelectStat()
{
StringBuffer sbSQL = new StringBuffer();
…
return sbSQL.toString();
}
}
那结果会是去调C.sqlCreateSelectStat()还是DbGtyGtmUserid.sqlCreateSelectStat()呢?