在java中我们不能覆盖最终方法但是可以重载吗?
答案 0 :(得分:28)
是的,重载最终方法是完全合法的。
例如:
public final void doStuff(int x) { ... }
public final void doStuff(double x) { ... }
答案 1 :(得分:13)
是的,但请注意,动态调度可能无法满足您的期望!快速举例:
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
答案 2 :(得分:8)
是的,非常可能。
一个小程序来演示它:
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
答案 3 :(得分:2)
是,为什么不呢?它与非最终方法的重载一样合法。
但你无法覆盖它们(你已经知道了)。
例如:
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 */ }
答案 4 :(得分:1)
是的有可能。
您可以通过编写小型Java类来检查这类事情。
class TestClass{
final public void testMethod(){
}
final public void testMethod(int i){
}
}
答案 5 :(得分:1)
是:
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[]) {
b m = new b();
m.method1(10);
}
}
答案 6 :(得分:0)
是的,在java中可以重载最终方法。最终方法被限制为不覆盖方法。
重载参数列表必须是不同类型的重载方法。
答案 7 :(得分:0)
是的,我们可以重载最终方法
答案 8 :(得分:0)
是的,您可以重载但不能覆盖。