Подтвердить что ты не робот

Возможно ли перегрузить конечный метод

В java мы не можем переопределить конечный метод, но можно ли перегрузить?

4b9b3361

Ответ 1

Да, перегрузка окончательного метода совершенно законна.

Например:

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

Ответ 2

Да, но имейте в виду, что динамическая отправка может не делать то, что вы ожидаете! Быстрый пример:

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

Да, очень возможно.

Небольшая программа для демонстрации:

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

Ответ 4

ДА, почему бы и нет? Это так же законно, как перегрузка неконфиденциальных методов.

Но вы не можете переопределить их (вы уже знаете это).

Например:

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 */ }

Ответ 5

Да Возможно.

Вы можете изучить такие вещи, написав небольшие классы Java.

class TestClass{
   final public  void testMethod(){

   }

   final public  void testMethod(int i){

   }
 }

Ответ 6

Да:

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

Ответ 7

да, перегрузка конечного метода возможна в java.Как конечные методы ограничены, чтобы не переопределять методы.

в то время как перегрузка списка аргументов должна быть другого типа метода перегрузки.

Ответ 8

да, мы можем перегрузить окончательные методы