Как вызвать переопределенную функцию от ребенка в Java? - PullRequest
0 голосов
/ 21 ноября 2011

Я хочу создать интерфейс, и с точки зрения пользователя, я хочу, чтобы он выглядел чистым, и они могут писать свой код с этим синтаксисом.

public class child extends parent {
  @Override
  public void run() {
   }
 }

Main находится в родительском объекте, но как можно вызватьпереопределенная функция в parent.Также я не хочу, чтобы имя «child» было обязательным, поэтому я не могу вызвать его напрямую.

PS: это функция запуска, которую я хочу переопределить.

public class parent{
public static void main(String[] args) {
  run();
   }
 }

Ответы [ 9 ]

1 голос
/ 21 ноября 2011

для вызова переопределенной функции использования класса perent ..
super.run();
EX:

public class child extends parent {   
  @Override
  public void run() {  
  super.run(); 
   }
  }

что я получаю от вас ... Вы хотите вызвать дочернюю функцию из родительского класса ..
Для этого швы, как у обычной функции класса, потому что есть только отношение ч / б родитель-ребенок никакого отношения в child-to-parent
Итак, вы просто создаете объект child и затем вызываете функцию дочернего класса ...
Таким образом, ваш основной родительский класс может выглядеть следующим образом ..

          public static void main(String[] args) {
          new child().run();            
    }
1 голос
/ 21 ноября 2011

Сделай Родителя и запусти abstract. Абстрактный для класса означает, что этот класс не может быть непосредственно создан, но может быть создан, если существует подкласс Абстрактный для метода означает, что метод определен в абстрактном классе, но не реализован в абстрактном классе. Вместо этого подклассы должны обеспечивать реализацию абстрактного метода или объявлять себя абстрактными.

public abstract class Super {

    public static void main(String[] args) {
        Super s = new Sub();
        s.main(); 
    }

    public abstract void run();

    public void main() {
        System.out.println("Calling sub class's implementation of run");
        // The super class does not know the implementation of run
        // but it does know that there must be an implementation to use.
        run();
        System.out.println("Done!");
    }

}

class Sub extends Super {

    @Override
    public void run() {
        System.out.println("sub class implementation of run");
    }

}
0 голосов
/ 21 ноября 2011

Вам, вероятно, нужно что-то подобное.

public Parent
{
  public final void run()
  {
    this.runChild
  }

  protected abstract void runChild();
}

public class Child extends Parent
{
  public static void main(String[] args)
  {
    run();
  }

  protected void runChild()
  {
    ....
  }
}
0 голосов
/ 21 ноября 2011

Я не уверен, правильно ли я отвечаю на ваш вопрос.Из того, что я поняла, вы пытаетесь сделать что-то вроде вызова бегства ребенка от Родителя.Если это так, то ниже приведен фрагмент кода для этого.

 public abstract class Parent{

    public abstract void run();

    public void mainMethod(){
      //This automatically calls run from child
       run();
    }
  }

И ваша дочерняя реализация похожа на приведенную ниже.

0 голосов
/ 21 ноября 2011

Полагаю, вы путаете между функцией main () и каким-то случайным классом Main, на который вы ссылаетесь. В общем, когда дело доходит до наследования, вы не можете вызвать переопределенную функцию производного класса из базового класса. В этом случае вы создаете указатель на базовый класс и указываете на объект производного класса. В том случае, когда вы используете указатель базового класса для вызова функции, вызывается переопределенная производная функция classs.

Я не уверен, ответил ли я вам полностью ..

Это может помочь вам .. -> http://www.oodesign.com/dependency-inversion-principle.html

0 голосов
/ 21 ноября 2011

Вы можете вызывать методы класса super (Parent) с помощью ключевого слова super. Вот так.

public class child extends parent { @Override<br> public void run() { super.run(); } }

0 голосов
/ 21 ноября 2011

Не уверен, правильно ли я понимаю.Но родитель не может знать, будут ли переопределены защищенные / открытые методы, где и как он будет защищен, поэтому он не может вызывать переопределенные реализации.

Если вам придется это сделать, вы, вероятно, неправильно разработали иерархию классов.

0 голосов
/ 21 ноября 2011

Вы хотите сказать, что хотите вызвать функцию run (), определенную в родительском элементе?

public class child extends parent 
{
  @Override
  public void run() 
  {
    super.run();    // call parent's run() function
    this.doStuff(); // call child's additional functionality
  }
 }
0 голосов
/ 21 ноября 2011

Для вызова перезаписанной функции у родительского пользователя что-то вроде одного из них:

super.run();

((parent) this).run();
...