是否有可能超载最终方法
在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中可以重载最终方法。最终方法被限制为不覆盖方法。
而重载参数列表必须是不同类型的重载方法。
是的,我们可以重载最终的方法