2016-04-10 8 views
0

Klasse1 ist eine abstrakte Klasse und verfügt über eine foo() Methode. Klasse2 erweitert Klasse1 und hat eine doo() Methode, aber überschreiben Sie nicht die foo() Methode.Zusammenfassung, erweitert und erstellen Instanz Ausgabe

Warum kann ich nicht anrufen doo() Methode in Tester Klasse?

Klasse1.java

public abstract class Klasse1 { 
    public void foo() { 
     System.out.println("Klasse1"); 
    } 
} 

Klasse2.java

public class Klasse2 extends Klasse1 { 
    public void doo() { 
     System.out.println("Klasse2"); 
    } 
} 

Tester.java

public class Tester { 
    public static void main(String[] args) { 
     Klasse1 k; 
     k = new Klasse2(); 
     k.foo(); 
     k.doo(); // doesn't work 
    } 
} 
+2

Weil 'Klasse1' tut' doo haben() ' – Rehman

+1

@Rehman, die' troo' ist – schwobaseggl

+0

Sie einen Referenztyp, wenn Klasse1, so zu diesem Zeitpunkt Sie nur wissen, was Klasse1 kann/ –

Antwort

2

Beim Kompilieren Der Java-Compiler überprüft den Referenztyp anstelle des Instanztyps.

In diesem Fall ist der Referenztyp Klasse1, der doo() nicht enthält. Daher wird es einen Fehler werfen.

1

Klasse1 hat keine doo Methode, so ist es natürlich.

Sie können, dass auf Ihre Klasse2 gegossen und dann wie folgt verwenden:

((Klasse2)k).doo(); 
0

K ein Objekt der Klasse ist Klasse2 aber als Klasse1 verwiesen,

K alle Methoden aufrufen können, die Klasse1 erklärt und kann alle Methoden aufrufen, die Klasse2 deklariert sind, wenn sie an diese Klasse übergeben werden.

Beispiel:

public class Tester { 
    public static void main(String[] args) { 
     Klasse1 k; 
     k = new Klasse2(); 
     k.foo(); 
     ((Klasse2)k).doo(); // now works 
    } 
} 
+0

Danke! Das hat mein Problem gelöst! –