sanshui_yangfei
2019-12-26 21:37
采纳率: 55.6%
浏览 331
已采纳

一个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方法

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • VICTOR_fusheng 2019-12-27 14:39
    已采纳

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

    点赞 打赏 评论
  • blownewbee 2019-12-27 00:03

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

    点赞 打赏 评论

相关推荐 更多相似问题