Як у Java я називаю метод базового класу з переосмислювального методу у похідному класі?


137

У мене є два класи Java: B, який розширює інший клас А, як слід:

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { /* Another code */ }
}

Я хотів би зателефонувати A.myMethod()з B.myMethod(). Я родом із світу C ++ , і я не знаю, як це зробити в Яві.

Відповіді:


145

Ви шукаєте ключове слово super. Наприклад, дивіться це керівництво .


4
Схоже, в C ++ ви можете викликати метод конкретного предка, але не Java, ви можете просто передати його по ланцюжку ...
rogerdpack

132

Просто зателефонуйте за допомогою супер.

public void myMethod()
{
    // B stuff
    super.myMethod();
    // B stuff
}

21

Відповідь така:

super.Mymethod();
super();                // calls base class Superclass constructor.
super(parameter list);          // calls base class parameterized constructor.
super.method();         // calls base class method.

20

super.MyMethod()слід назвати всередині MyMethod()з class B. Тож має бути так

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { 
        super.MyMethod();
        /* Another code */ 
    }
}


7

Я майже впевнений, що ви можете це зробити за допомогою механізму відбиття Java. Це не так просто, як використання супер, але це дає більше сил.

class A
{
    public void myMethod()
    { /* ... */ }
}

class B extends A
{
    public void myMethod()
    {
        super.myMethod(); // calling parent method
    }
}

Це не відображає жодного відбиття Java у коді та є тим самим кодом, що й інші. Чи є ще відповідь?
Nelda.techspiress


3
super.baseMethod(params);

виклик базових методів із супер ключовим словом та передайте відповідні параметри.


3
class test
{
    void message()
    {
        System.out.println("super class");
    }
}

class demo extends test
{
    int z;
    demo(int y)
    {
        super.message();
        z=y;
        System.out.println("re:"+z);
    }
}
class free{
    public static void main(String ar[]){
        demo d=new demo(6);
    }
}

3

Дивіться, тут ви переосмислюєте один із методів базового класу, отже, якщо ви хочете викликати метод базового класу з успадкованого класу, тоді вам доведеться використовувати ключове слово супер у тому ж методі спадкового класу.


1

Якщо ур використовує ці методи для ініціалізації, тоді використовуйте конструктори класу A і передайте супер ключове слово всередині конструктора класу B.

Або якщо ви хочете викликати метод суперкласу з методу підкласу, тоді ви повинні використовувати супер ключове слово всередині методу підкласу, як: super.myMethod ();


1
// Using super keyword access parent class variable
class test {
    int is,xs;

    test(int i,int x) {
        is=i;
        xs=x;
        System.out.println("super class:");
    }
}

class demo extends test {
    int z;

    demo(int i,int x,int y) {
        super(i,x);
        z=y;
        System.out.println("re:"+is);
        System.out.println("re:"+xs);
        System.out.println("re:"+z);
    }
}

class free{
    public static void main(String ar[]){
        demo d=new demo(4,5,6);
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.