是否有可能超载最终方法

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

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

例如:

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

是的,但请注意,动态调度可能无法满足您的期望! 快速举例:

 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)); } 

这将打印:

 目的
目的 

是的,非常有可能。

一个小程序来演示它:

 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); } } 

输出:

来自A级的foo ver 1
来自A级的foo ver 2
来自B级的foo ver 3

是的 ,为什么不呢? 它与重载非最终方法一样合法。

但你无法覆盖它们 (你已经知道了)。

例如:

 public final void func(String x) {/* code */} public final void func(double x) { /* more code */ } public final void func(int x) { /* yeah I have still more code */ } 

对的,这是可能的。

您可以通过编写小型Java类来检查这类事情。

 class TestClass{ final public void testMethod(){ } final public void testMethod(int i){ } } 

是:

 class a { final void method1(int a,int b) { System.out.println("super class"); int d = a+ b; System.out.println(d); } } class b extends a{ final void method1(int a) { System.out.println("sub class"); System.out.println(a); } } public class c { public static void main(String ar[]) { bm = new b(); m.method1(10); } } 

是的,在java中可以重载最终方法。最终方法被限制为不覆盖方法。

而重载参数列表必须是不同类型的重载方法。

是的,我们可以重载最终的方法