Вызов функции переопределения базового класса из метода базового класса

public class A {
    public void f1(String str) {
        System.out.println("A.f1(String)");
        this.f1(1, str);
    }

    public void f1(int i, String str) {
        System.out.println("A.f1(int, String)");
    }
}



public class B extends A {
    @Override
    public void f1(String str) {
        System.out.println("B.f1(String)");
        super.f1(str);
    }

    @Override
    public void f1(int i, String str) {
        System.out.println("B.f1(int, String)");
        super.f1(i, str);
    }
}


public class Main {
    public static void main(String[] args) {
        B b = new B();
        b.f1("Hello");
    }
}

Я ищу, чтобы этот код выводил:

B.f1(String)
A.f1(String)
A.f1(int, String)

Но я получаю:

B.f1(String)
A.f1(String)
B.f1(int, String)
A.f1(int, String)

] Я понимаю, что в контексте B "this" в A.f1 (String) является экземпляром B. Есть ли у меня возможность создать цепочку new B1 (). F1 (String) -> (A's) f1 (String) -> (A's) f1 (int, String)?

Это теоретический вопрос, практически решение, очевидно, будет заключаться в A для реализации частной функции, которую будут вызывать как f1 (String), так и f1 (int, String).

Спасибо,
Максим.

36
задан Michael0x2a 8 December 2013 в 19:01
поделиться