В java мы не можем переопределить конечный метод, но можно ли перегрузить?можно перегрузить окончательный метод
ответ
Да, перегрузка окончательного метода совершенно законна.
Например:
public final void doStuff(int x) { ... }
public final void doStuff(double x) { ... }
Да Возможно.
Вы можете изучить такие вещи, написав небольшие классы Java.
class TestClass{
final public void testMethod(){
}
final public void testMethod(int i){
}
}
ДА, почему нет? Это так же законно, как перегрузка неконфиденциальных методов.
Но вы не можете изменить их (вы уже знаете).
Например:
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.As окончательных методы ограничены, чтобы не перекрывать методы.
при перегрузке списка аргументов должен быть другой тип метода перегрузки.
Да, очень возможно.
Небольшая программа для демонстрации его:
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
Да, но имейте в виду, что динамический отправка не может делать то, что вы ожидаете! Быстрый пример:
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
Да, поскольку для обоих объектов, созданных в основном методе, задан самый высокий родительский тип данных 'Base', они оба будут печатать« * Object * ». Поскольку экземпляр «Derived» имеет отношение «* is *» к классу «Base», этот объект может быть передан в 'Derived' для вызова метода, который печатает« * Int * ». –
@IanCampbell Exactly '((Производный) d) .doSomething (1);' –
Динамическая отправка происходит, когда вы переопределяете методы, а не с перегрузкой. – sharhp
да мы можем перегружать окончательные методы
Да:
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);
}
}
Вы должны отформатировать свой код и добавить что-то, чтобы объяснить свой ответ. – Jonathan
Когда вы пытались это то, что случилось? –