zoukankan      html  css  js  c++  java
  • 当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!!!!! 
    -哔 ……

  • 相关阅读:
    深入理解JavaScript系列(17):面向对象编程之概论
    深入理解JavaScript系列(16):闭包(Closures)
    深入理解JavaScript系列(15):函数(Functions)
    深入理解JavaScript系列(14):作用域链(Scope Chain)
    SSM框架之多数据源配置
    开源项目之架构分享
    SpringBoot实战(十二)之集成kisso
    开源项目之kisso
    MP实战系列(十八)之XML文件热加载
    MP实战系列(十七)之乐观锁插件
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6993867.html
Copyright © 2011-2022 走看看