开发者社区 问答 正文

父类在当前工程中,子类在jar包中不能正确覆盖方法咨询?报错

工程A(project-a)依赖工程B(project-b)的jar包(project-b.jar)
工程B中有这么两个类
Parent
----DataSource getDataSource(String param1,String param2)
Child extends Parent
----ChildDataSource getDataSource(String param1,String param2)
----ChildDataSource getDataSource()

且ChildDataSource extends DataSource

在工程A中想调用Child的getDataSource方法
Parent parent = new Child();
parent.getDataSource();

报错。于是将工程B中的Parent复制到工程A中(同样包名,同样类名)同时添加了一个getDataSource方法,如下所示:
DataSource getDataSource(){
    return null;
}

现在虽然不报错了,但是却是执行的父类的getDataSource方法,似乎子类并没有覆盖它。

不知何故?

展开
收起
爱吃鱼的程序员 2020-06-14 16:44:16 484 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    貌似,你Java基础知识都不扎实~

    报错1:

    Parentparent=newChild();
    parent.getDataSource();

    肯定要报错呀,在父类中不存在 getDataSource()方法,请在父类中编写 getDataSource()方法。

    报错2:

    将工程B中的Parent复制到工程A中(同样包名,同样类名)??

    工程A的Parent的类删了没?没删除的话类的全限定名就冲突了。

    见我下面的回复没看明白,为啥要把parent移到A项目中去...直接在parent加方法不行么,要么给child再加一个接口呗,接口里有 getDataSource方法...

    有时候需要对第三方jar包临时做一些修改有一个便捷的方法如

    Loggerlogger=LoggerFactory.getLogger(LoggerTest.class)

    想在getLogger的时候打印一下输入参数class的类名。

    这时可以将原slf4j-api-1.5.8.jar包中的org.slf4j.LoggerFactory复制到当前开发工程中,如下所示:

    依赖的原始jar包:

    当前开发工程:

    这时在复制到本地的LoggerFactory中做如下修改:

    publicstaticLoggergetLogger(Classclazz){System.out.println(clazz);//添加的内容returngetLogger(clazz.getName());}



    再在本工程中写一个测试类: privatestaticLoggerlogger=LoggerFactory.getLogger(LoggerTest.class);publicstaticvoidmain(String[]args){logger.info("helloworld");}



    看其输出: classcom.test.LoggerTest2015-04-1621:29:48INFOcom.test.LoggerTesthelloworld

    另外够任性的话你也可以在你的工程中创建一个java.lang.String的类如下所示:


    2020-06-14 16:44:31
    赞同 展开评论
问答分类:
问答地址: