Наследование Java - вызов метода суперкласса - PullRequest
51 голосов
/ 01 августа 2011

Предположим, у меня есть следующие два класса

public class alpha {

    public alpha(){
        //some logic
    }

    public void alphaMethod1(){
        //some logic
    }
}

public class beta extends alpha {

    public beta(){
        //some logic
    }

    public void alphaMethod1(){
        //some logic
    }
}

public class Test extends beta
{
     public static void main(String[] args)
      {
        beta obj = new beta();
        obj.alphaMethod1();// Here I want to call the method from class alpha.
       }
}

Если я инициирую новый объект типа бета, как я могу выполнить логику alphamethod1, найденную в классе альфа, а не в бете? Могу ли я просто использовать super().alphaMethod1() <- интересно, возможно ли это. </p>

Автотип в Eclipse IDE дает мне возможность выбрать alphamethod1 из класса alpha или из класса beta.

Ответы [ 5 ]

78 голосов
/ 01 августа 2011

Вы можете сделать:

super.alphaMethod1();

Обратите внимание, что super является ссылкой на родителя, но super () является его конструктором.

19 голосов
/ 01 августа 2011

Просто используйте super.alphaMethod1();

См. супер ключевое слово в Java

12 голосов
/ 21 сентября 2013

Вы не можете вызвать alphaMethod1 () альфы с помощью объекта бета, но у вас есть два решения:

решение 1: вызов альфа alphaMethod1() из бета alphaMethod1()

class Beta extends Alpha
{
  public void alphaMethod1()
  {
    super.alphaMethod1();
  }
}

или из любого другого метода бета-версии, например:

class Beta extends Alpha
{
  public void foo()
  {
     super.alphaMethod1();
  }
}

class Test extends Beta 
{
   public static void main(String[] args)
   {
      Beta beta = new Beta();
      beta.foo();
   }
}

решение 2 : создать объект альфы и вызвать альфа alphaMethod1()

class Test extends Beta
{
   public static void main(String[] args)
   {
      Alpha alpha = new Alpha();
      alpha.alphaMethod1();
   }
}
4 голосов
/ 01 августа 2011

Можно использовать super для вызова метода из родительского класса, но это может означать, что у вас, вероятно, есть проблема с дизайном.Может быть, B.alphaMethod1() не должен переопределять метод A и вызываться B.betaMethod1().

Если это зависит от ситуации, вы можете поместить некоторую логику кода, например:

public void alphaMethod1(){
    if (something) {
        super.alphaMethod1();
        return;
    }
    // Rest of the code for other situations
}

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

3 голосов
/ 12 марта 2013

Каждый раз, когда вы создаете объект дочернего класса, этот объект обладает всеми функциями родительского класса.Здесь Super () является средством для родительского присоединения.

Если вы пишете super (), в это время вызывается родительский конструктор по умолчанию.то же самое если пишешь супер.

это ключевое слово относится к текущему объекту так же, как супер-ключевое слово facilty для доступа к родителям.

...