2016-09-25 3 views
1

Ich habe die folgenden zwei Klassen. Ich frage mich, wie ich die Instanz-Methode von ClassA, d. H. AMessage() in Klasse B ohne die Instanz eines ClassA oder ClassB erstellt werden kann?Kann ich die Instanzmethode einer übergeordneten Klasse direkt in der untergeordneten Klasse in Java aufrufen?

Ich dachte ich, wie unten Instanzmethode von ClassA dh AMessage() in der Klasse B nennen sollte:

new ClassA().AMessage(); //no compile error 

new ClassB().Amessage(); //no compile error 

Geordnete Klasse (ClassA.java)

public class ClassA { 
    public void AMessage(){ 
     System.out.println("A Message"); 
    } 
} 

Child-Klasse (ClassB .java)

public class ClassB extends ClassA{ 

     public void BMessage(){ 
      AMessage(); //no compile error 
     } 
     public static void main(String[] args){ 
      new ClassB().BMessage(); 
     } 
    } 
+1

Sie können natürlich keine Instanzmethode aufrufen, ohne eine Instanz zu erstellen, wenn es das ist, was Sie wollen, weil Ihre Frage nicht sehr deutlich ist.Der von Ihnen gepostete Code erstellt Instanzen und ruft deren Methoden auf. Was genau müssen Sie tun und dieser Code nicht? –

Antwort

0

arbeiten Wenn eine Klasse eine andere Klasse erweitert, es die sichtbaren Felder und Methoden der Basisklasse erbt automatisch. Mit sichtbar meine ich zugängliche Mitglieder. Private Mitglieder werden nicht vererbt. Erfahren Sie mehr über Vererbung in http://www.tutorialspoint.com/java/java_inheritance.htm

Also, wenn Sie eine Klasse ClassA mit einem Verfahren amessage wie dieses:

public class ClassA{ 
     public void AMessage(){ 
      System.out.println("A message"); 
     } 
    } 

und ClassB, die sich KlasseA wie folgt aus:

public class ClassB extends ClassA{ 

     public void BMessage(){ 
      AMessage(); 
     } 
     public static void main(String[] args){ 
      new ClassB().BMessage(); 
     } 
    } 

ClassB erbt automatisch Mitglieder von ClassA, dh sie verhalten sich so, als wären sie selbst Mitglieder von ClassB. Aus diesem Grund können wir die Instanzmethode von ClassA innerhalb von ClassB ohne Instanz aufrufen, da sie ebenfalls zu ClassB gehören. Neben den Instanzmethoden können Sie auch statische Methoden aufrufen. (Aber natürlich kann man nicht Anruf-Instanz Methoden innerhalb statischen Methoden.)

Als weitere Antwort würde Ich mag, dass vorschlagen (obwohl es nicht auf die Frage verwandt ist, aber es ist eine gute Praxis) Sie sollten nicht Benennen Sie jede Methode einer Klasse (Instanz oder Statik), die mit einem Großbuchstaben beginnt. Es erzeugt keinen Compiler-Fehler, wenn Sie es immer noch so benennen, aber es beeinträchtigt die Lesbarkeit. Ich habe die Namen nur so geschrieben, dass sie sich auf Ihre Frage beziehen.

+0

Danke Dhruv für die informative Erklärung. –

+0

@ VishvambruthJT das Vergnügen ist meins. Prost –

0

Verwenden Sie das Schlüsselwort super, um Basisklassenmethoden aufzurufen. Überprüfen Sie diese Referenz - http://docs.oracle.com/javase/tutorial/java/IandI/super.html

public class ChildClass extends BaseClass{ 

     public static void main(String[] args){ 
      ChildClass obj = new ChildClass(); 
      obj.Message(); 
     } 

     public void Message(){ 
      super.Message(); 
     } 
} 

class BaseClass { 
    public void Message(){ 
     System.out.println("Base Class called"); 
    } 
} 

Oder man kann es so machen, wie gut -

public class ChildClass extends BaseClass{ 

     public static void main(String[] args){ 
      new ChildClass().Message(); 
     } 
} 

class BaseClass { 
    public void Message(){ 
     System.out.println("Base Class called"); 
    } 
} 
+0

Also in meiner Kindklasse als ich AMessage() angerufen habe; Funktioniert direkt ohne irgendeine Instanz, die der Compiler standardmäßig von der Elternklasse versteht? –

+0

Ich habe meine Antwort aktualisiert, hoffe, es hilft. –

0

ja können Sie die Methode direkt Instanz Methode der Elternklasse von Kind Klassenobjekt zur Verfügung gestellt Eltern rufen Klassenmethode sollte öffentlich sein

können Sie auf diese Weise anrufen

new ClassB().AMessage(); 

wird es auch

Verwandte Themen