当Java代码遇上抽象、重载加重写,一切都不美好了
当Java代码遇上抽象、重载加重写。一切都不美好了
前几天调程序遇上个奇怪的bug。一直没找到问题,今天最终发现问题所在了,不说了先上代码(下面代码是演示样例代码,经測试,Java不存在这问题,安卓存在这问题):
片段1:
@Override
public void printfData() {
printfData("hello");
}
第一眼看上去貌似没什么不正确,这段代码非常正常嘛。代码检查工具也没报错哇,为啥就就是不正确呢?
再细致看一眼:我靠。方法名和被调用的方法名是一样的,也就是说被调用方法是调用者方法的重载,而调用方法是重写的方法?那被重写的方法呢?它在哪儿?
继续查找……
经过一番查找,得到下面代码:
片段2:
public abstract class ImplementationClass extends AbstractClass {
@Override
public void printfData(String s) {
System.out.println(s);
}
}
片段3:
public abstract class AbstractClass {
public abstract void printfData();
public abstract void printfData(String s);
}
我靠,原来这货是抽象出来的。。
。。。
那么它会引起什么错误呢?
经过调试,居然发现,片段1中的代码没运行。编译器直接去调用片段三中的printfData()方法。
下面个人言论经过反和谐处理:
what fuck!!!!!
-哔 ……
那么是怎么引起的这个问题呢?
经过咨询群里的大师级人物得知:
此乃编译过程的问题。带我慢慢道来……
(因为内容过于难以理解,so,我全忘了)
(假设有谁懂的,请在评论区解说写,Thanks)
大师给的解决方式:
改动方法命名,不要让出现一个代码出现重写重载加抽象的情况。
下面个人言论经过反和谐处理:
what fuck!!!!!
-哔 ……
完
当Java代码遇上抽象、重载加重写,一切都不美好了的更多相关文章
- Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- java中,重构、重载、重写
1.什么叫重构? 答:重构(Refactoring)就是通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性,系统发展到一定阶段后,使用重构的方式,不改变系 ...
- Java基础:多态(重载和重写)
转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...
- 在自学java路上遇上的南墙
从2016年12月20号自学java,先是咨询了下培训中心,得小两万,四个月毕业,算了一笔账,一百二十天,合下来每天三百多块,再加上开销之类压力太大,于是开始入坑自学,随后血一般的教训直面而来: 1. ...
- Java Synchronized 遇上 静态/实例方法 、静态/实例变量
同步 1)同步方法 2)同步块 21) 实例变量 22) 类变量 锁定的内容 1)锁定类的某个特定实例 2)锁定类对象(类的所有实例) 一.同步类实例:同步方法 public class Demo { ...
- html实体编码遇上js代码
单双引号 在js代码中 在js中单.双引号引起来的是字符串,如果我们要在字符串中使用单.双引号,需要反斜杠进行转义 let str='user\'s name'; // or let str=&quo ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- 01 Java 代码是怎么运行的
Java代码运行的方式 1:在开发工具中运行 2:双击 jar 文件运行 3:在命令行中运行 4:在网页中运行 上述运行方式都离不开 JRE,也就是 Java 运行时环境.实际上 JRE 仅包含运行 ...
- Java代码到字节码——第一部分
Java代码到字节码——第一部分 原文地址 作者:James Bloom 译者:张坤 理解在Java虚拟机中Java代码如何别被编译成字节码并执行是非常重要的,因为这可以帮助你理解你的程序在运行时发生 ...
随机推荐
- Unity 性能优化(力荐)
开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...
- HDU——T 2647 Reward
http://acm.hdu.edu.cn/showproblem.php?pid=2647 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- ArcGIS api for javascript——图形-使用多个图形图层
描述 本例展示了如何增加多个图形图层到地图.一个图形图层显示国家,另一个显示城市.在一个地图中有多个图形图层的能力是在ArcGIS JavaScript API v1.4增加的. 从蓝色的城市点分隔灰 ...
- ArcGIS api for javascript——显示多个ArcGIS Online服务
描述 本例展示了如何使用按钮在地图里的两个不同的图层间切换.所有地图里的图层恰巧是来自ArcGIS Online的ArcGISTiledMapServiceLayers.按钮是Dojo dijit按钮 ...
- Java排序算法(二):简单选择排序
[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用 ...
- Cocos2d-x学习笔记(十四)CCAutoreleasePool具体解释
原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38964637 前言 之前学了那么多的内容.差点儿全部的控件都要涉及内存 ...
- Lesson 2 Building your first web page: Part 2
Tag Diagram You may have noticed that HTML tags come in pairs; HTML has both an opening tag (<tag ...
- 85.explicit作用
#include <iostream> using namespace std; class myclass { public: int num; public: explicit myc ...
- POJ 1895 分层图网络流+输出路径
题意: 题目描述:在公元3141年人类的足迹已经遍布银河系.为了穿越那巨大的距离,人类发明了一种名为超时空轨道的技术.超时空轨道是双向的,连接两个星系,穿越轨道需要一天的时间.然而这个轨道只能同时给一 ...
- Linux下大型容量件的切割与合并
Linux下大型容量件的切割与合并 当前目录下有sp4.exe文件容量129M我用64的U盘把spe.exe考到另一台机器上#split -b 60m sp4.exe-b, --bytes=SIZE ...