is it possible to overload a final method
In java we cannot开发者_运维知识库 override a final method but is it possible to overload ?
Yes, overloading a final method is perfectly legitimate.
For example:
public final void doStuff(int x) { ... }
public final void doStuff(double x) { ... }
Yes, but be aware that dynamic dispatch might not do what you are expecting! Quick example:
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));
}
This will print:
Object Object
Yes, very much possible.
A small program to demonstrate it:
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);
}
}
Output:
foo ver 1 from class A foo ver 2 from class A foo ver 3 from class B
YES, why not? It is as legal as overloading non-final methods.
But you cannot override them (you already know it).
Eg :
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 */ }
Yes It is possible.
You can examine this kind of things by writing small Java classes.
class TestClass{
final public void testMethod(){
}
final public void testMethod(int i){
}
}
Yes:
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);
}
}
Yes, You can overload but not override.
yes overloading final method is possible in java.As final methods are restricted not to override the methods.
while overloading argument list must be different type of the overloading method.
yes we can overload the final methods
精彩评论