如果父类没有重载祖父类的方法,子类能override祖父类的方法吗?

charlesxu 2016-11-06 03:43:08
子类MyHttpMessageConverter重载了MappingJackson2HttpMessageConverter,MappingJackson2HttpMessageConverter类重载了AbstractJackson2HttpMessageConverter。

read(Type type, Class<?> contextClass, HttpInputMessage inputMessage)方法是在AbstractJackson2HttpMessageConverter里定义的。在MappingJackson2HttpMessageConverter里没有重载这个方法。

那么在MyHttpMessageConverter里override了read(Type type, Class<?> contextClass, HttpInputMessage inputMessage)这个方法后,程序始终没有进到MyHttpMessageConverter的read方法。

代码如下:

//子类
public class MyHttpMessageConverter extends MappingJackson2HttpMessageConverter {
@Override
public Object read(Type type, Class<?> contextClass,
HttpInputMessage inputMessage) throws IOException,
HttpMessageNotReadableException {
//断点始终到不了这里
return super.read(type, contextClass, inputMessage);
}
}

//父类
public class MappingJackson2HttpMessageConverter extends AbstractJackson2HttpMessageConverter {
//重载了AbstractJackson2HttpMessageConverter里其他方法但是不包括read方法
}

//祖父类
public abstract class AbstractJackson2HttpMessageConverter extends AbstractGenericHttpMessageConverter<Object>
implements GenericHttpMessageConverter<Object> {
@Override
public Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {

JavaType javaType = getJavaType(type, contextClass);
return readJavaType(javaType, inputMessage);
}
}
...全文
661 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码与酒 2016-11-15
  • 打赏
  • 举报
回复
引用 7 楼
大致看了下StackOverflow上面的这个帖子,感觉他那个问题跟你这个还是有点区别的,单就“子类是否能override祖父类的方法”这一点来说,个人认为是肯定没问题的。至于spring mvc的消息转换器,个人资历还尚浅,更不敢妄下定论,楼主考虑下是不是问题出现在了别的地方
charlesxu 2016-11-12
  • 打赏
  • 举报
回复
引用 5 楼 qq_16313365 的回复:
再一个呢,我说的这个“如何调用的这个方法”指的是你如何创建对象、调用这个方法的代码。
你好, qq_16313365 请看这个帖子 http://stackoverflow.com/questions/2584377/java-how-to-call-method-of-grand-parents 父类,祖父类都是spring框架里集成的Jackson API里的类,我用MyHttpMessageConverter重载了父类,下面是sping的配置文件。原本程序是用MappingJackson2HttpMessageConverter来处理request发过来的string转json的。我重载后就用 MyHttpMessageConverter来处理了。 这个问题我研究3周了,不可能看错,MyHttpMessageConverter类的read方法里加了我的代码,但是调试时进不去。

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="com.parsons.vm.eSafetyWebService.controller.MyHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/x-javascript</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
qq_28935829 2016-11-11
  • 打赏
  • 举报
回复
可以的啊。。。。。
代码与酒 2016-11-11
  • 打赏
  • 举报
回复
首先更正下啊,重载和重写是两个截然不同的概念,不要混淆字眼,容易产生误解。 再一个呢,我说的这个“如何调用的这个方法”指的是你如何创建对象、调用这个方法的代码。 还有就是你说的这个“程序只执行了祖父类里的read方法”,不知道你这个子类方法中是不是像你贴出来的代码这样只有一句return super.read(type, contextClass, inputMessage);,如果只有这么一句的话自然也会去执行祖父类里面的方法啊,也可能是你调试的时候没有发现,当然,这只是我的猜测而已,楼主莫怪! 最后你把你看的那个帖子的地址发下我看看
charlesxu 2016-11-10
  • 打赏
  • 举报
回复
引用 2 楼 qq_16313365 的回复:
两个问题: 1.子类可以重写祖父类的方法,别说祖父类,曾曾曾..祖父也没毛病。 2.卤煮还是没有太区分重载和重写的区别,标题上就能看的出来,建议再加强下知识。 另外,把你: 子类如何重写的方法、祖父类如何定义的方法、以及如何调用的这个方法 的代码贴出来瞅瞅。
”子类如何重写的方法、祖父类如何定义的方法、以及如何调用的这个方法“都在一楼了,MappingJackson2HttpMessageConverter是父类,AbstractJackson2HttpMessageConverter是祖父类,MyHttpMessageConverter是子类想重载祖父类的read方法,然后把inputMessage的内容打印出来。但是重载后子类这个read方法始终没有被调用,程序运行后只执行了祖父类里的read方法。 查了些帖子说的是父类如果没有重载祖父类的方法,子类是不能重载的。因为不符合封装的理念。
charlesxu 2016-11-09
  • 打赏
  • 举报
回复
顶啊
bcsflilong 2016-11-09
  • 打赏
  • 举报
回复
引用 2 楼 qq_16313365 的回复:
两个问题: 1.子类可以重写祖父类的方法,别说祖父类,曾曾曾..祖父也没毛病。 2.卤煮还是没有太区分重载和重写的区别,标题上就能看的出来,建议再加强下知识。 另外,把你: 子类如何重写的方法、祖父类如何定义的方法、以及如何调用的这个方法 的代码贴出来瞅瞅。
+1
代码与酒 2016-11-09
  • 打赏
  • 举报
回复
两个问题: 1.子类可以重写祖父类的方法,别说祖父类,曾曾曾..祖父也没毛病。 2.卤煮还是没有太区分重载和重写的区别,标题上就能看的出来,建议再加强下知识。 另外,把你: 子类如何重写的方法、祖父类如何定义的方法、以及如何调用的这个方法 的代码贴出来瞅瞅。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧