2013-11-19 4 views
0

У меня есть одно сомнение, см. Следующий код. У меня есть три класса A, B и InheritanceExample. Здесь я вызываю super.run() из основного класса; он вызывает метод Brun().Метод Переопределение с использованием ключевого слова супер

Есть ли возможность вызвать метод запуска класса A из основного класса (InheritanceExample) без создания экземпляра для класса A?

class A 
{ 
    void run() 
    { 
     System.out.println("<<<====Class A run Method===>>>>"); 
    } 
} 

class B extends A 
{ 
    void run() 
    { 

     System.out.println("<<<====Class B run Method===>>>>"); 
     super.run(); 
    } 
} 

public class InheritanceExample extends B{ 

    /** 
    * @param args 
    */ 
    void run() 
    { 
     System.out.println("<<<====Main Class run Method===>>>>"); 
     super.run(); 
    } 
public static void main(String[] args) { 
    InheritanceExample a = new InheritanceExample(); 
    a.run(); 
} 
    } 
+0

Вопрос заключается вы хотите создать экземпляр * * из 'Ā' при создании экземпляра * * из' InheritanceExample'? –

ответ

0

С BрасширяетA и InheritanceExampleрасширяетB вы создаете экземпляр. Метод изготовления A.run()статический.

class A 
{ 
    void static run() 
    { 
     System.out.println("<<<====Class A run Method===>>>>"); 
    } 
} 

class B 
{ 
    void run() 
    { 
     System.out.println("<<<====Class B run Method===>>>>"); 
     A.run(); 
    } 
} 

public class InheritanceExample extends B { 

    @Override 
    void run() 
    { 
     System.out.println("<<<====Main Class run Method===>>>>"); 
     super.run(); 
    } 

    public static void main(String[] args) { 
     InheritanceExample a = new InheritanceExample(); 
     a.run(); 
    } 
} 
0

Номер

Не без A.run() отличается от B.run(), например, путем A.run() статическим.

Когда B расширяет A, вы, как программист, должны убедиться, что с точки зрения вызывающих абонентов B "is-a" A. То, что вы хотите сделать, это нарушить это правило.

Если вы хотите использовать B как А, вы, вероятно, пытается сделать что-то в точке вызова, который должен быть обработан внутри в B.

0

Не уверен, что вы хотите достичь. Но, глядя на иерархию и структуру классов, невозможно напрямую вызвать метод run класса A. Но если мы изменим и представим дополнительный статический метод say runImpl в классе A и выведем тот же метод из метода run класса A. Теперь мы можем вызывать runImpl из любого места, поскольку он является статичным, а метод run тоже внутренне вызывает runImpl, поэтому такая же реализация получает вызов через run и runImpl.

Ниже приведен фрагмент кода:

class A 
{ 
    void run() 
    { 
     runImpl(); 
    } 

    public static void runImpl(){ 
     System.out.println("<<<====Class A run Method===>>>>"); 
    } 
} 

class B extends A 
{ 
    void run() 
    { 

     System.out.println("<<<====Class B run Method===>>>>"); 
     super.run(); 
    } 

} 

public class InheritanceExample extends B{ 

    /** 
    * @param args 
    */ 
    void run() 
    { 
     System.out.println("<<<====Main Class run Method===>>>>"); 
     super.run(); 
    } 
    public static void main(String[] args) { 
     A.runImpl(); 
    } 
} 
+0

Можно ли использовать 'B.runImpl()' или 'InheritanceExample.runImpl()'. –

+0

Так как класс B расширяет класс A, а InheritanceExample расширяет класс B, да, это возможно. –

+0

Я должен был сказать * это также *, поскольку это был не вопрос, а наблюдение. –

0
class a{ 

     void run(){ 

      System.out.println("runing method run of a clss"); 

     } 
    } 
    class b extends a{ 
     void run(){ 
      super.run(); 
      System.out.println("runing method run of b clss"); 
     } 

    } 
    class InheritanceExample extends b{ 
     void run(){ 
      super.run(); 
      System.out.println("running method run in inheritance class"); 
     } 
    } 

    class pratics{ 
     public static void main(String[] args){ 
     System.out.println("********"); 
     InheritanceExample a1=new InheritanceExample(); 
     a1.run(); 
     System.out.println("********"); 
     } 
    } 
+0

В наследовании всякий раз, когда вы хотите вызвать суперкласс, вам нужно использовать супер ключевое слово ..... – deepak

Смежные вопросы