当前位置:  开发笔记 > 编程语言 > 正文

是否可能超载最终方法

如何解决《是否可能超载最终方法》经验,为你挑选了3个好方法。

在java中我们不能覆盖最终方法但是可以重载吗?



1> Taylor Leese..:

是的,重载最终方法是完全合法的.

例如:

public final void doStuff(int x) { ... }
public final void doStuff(double x) { ... }



2> ZoFreX..:

是的,但请注意,动态调度可能无法达到预期效果!快速举例:

class Base {
    public final void doSomething(Object o) {
        System.out.println("Object");
    }
}

class Derived extends Base {
    public void doSomething(Integer i) {
        System.out.println("Int");
    }
}

public static void main(String[] args) {
    Base b = new Base();
    Base d = new Derived();
    b.doSomething(new Integer(0));
    d.doSomething(new Integer(0));
}

这将打印:

Object
Object


重写方法时会发生动态调度,而不是重载.

3> gameover..:

是的,非常有可能.

一个小程序来演示它:

class A{
    final void foo(){ System.out.println("foo ver 1 from class A"); }
    final void foo(int a){ System.out.println("foo ver 2 from class A"); }
    }


class B extends  A{
    final void foo(long l){ System.out.println("foo ver 3 from class B"); }
    // final void foo(){ System.out.println("foo ver 1 from class A"); } NOT ALLOWED
}

public class Test {    
    public static void main(String [] args){
        B obj = new B();

        obj.foo();
        obj.foo(1);
        obj.foo(1L);
    }   
}

输出:

foo ver 1 from class A
foo ver 2 from class A
foo ver 3 from class B

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有