一个DaoImpl类,既想通过实现IDao接口达到通过接口调用的目的,又想通过继承抽象类,使用父类的通用方法。应该怎么做?

1、IDao.java

package cn.test;

public interface IDao {
    public void Query();
}

2、GeneralDao.java

package cn.test;

public abstract class GeneralDao {
    public void generalDaoMethod() {
        System.out.println("调用generalDaoMethod方法");
    }
}

3、DaoImpl.java

package cn.test;

public class DaoImpl extends GeneralDao implements IDao {

    @Override
    public void Query() {
        System.out.println("调用接口的个性化查询方法");
    }

}

4、我能想到的就是强转,但觉得不好。
App.java

package cn.test;

public class App {

    public static void main(String[] args) {
        IDao dao=new DaoImpl();
        dao.Query();
        ((GeneralDao)dao).generalDaoMethod();
    }

}

5、输出

调用接口的个性化查询方法
调用generalDaoMethod方法

有没有其他更好的方法可以实现既可通过接口调用,又可以使用父类的方法?

做不到,你用IDao dao = new DaoImpl();这种方式,那么dao就只能执行IDao里有的方法,不能执行generalDaoMethod(),想这种使用就不要用父类,直接DaoImpl dao = new DaomImpl();

从语法的角度来说,DaoImpl作为类型,编译器才认为你的类既有Query也有generalDaoMethod
DaoImpl dao=new DaoImpl();
dao.Query();
dao.generalDaoMethod();