2016-05-04 5 views
-3

Wie kann ich rufen Sie eine Unterklasse Methode Arbeit(), wenn diese Zeile die gleiche bleiben muss:Wie kann ich eine Unterklassenmethode aufrufen?

Employee secretary = new Secretary();

public class Employee { 
} 

public class Secretary extends Employee { 
    public void work() {}; 
} 

public static void main(String[] args) { 
    Employee secretary = new Secretary(); 
    //secretary.work(); 
} 
+2

Wenn Sie die 'Werk' Methode auf einem' Employee' zu ​​nennen, sollten Sie sicherstellen, dass die 'Mitarbeiter 'Methode hat eine'Arbeit'-Methode. Derzeit geht es Ihnen nicht besser, als nur 'Secretary secretary = new Secretary()' zu sagen. – hexafraction

+1

Fühlt sich an wie eine Hausaufgabenfrage ... –

+5

Ihr '' Sekretär'' erweitert nicht einmal '' Mitarbeiter''. – f1sh

Antwort

3

Ihre Sekretärin Klasse muss sich Employee

public static class Employee { 
} 

public static class Secretary extends Employee{ 
    public void work() { 
    } 
} 

public static void main(String[] args) { 
    Employee secretary = new Secretary(); 
    ((Secretary)secretary).work(); 
} 

Und weil secretary ist Als Employee deklariert können Sie die Methoden der Secretary Klasse nicht aufrufen, müssen Sie es umwandeln:

((Secretary)secretary).work(); 

Dies wird die compilator sagen, dass Ihr secretary ein Employee vom Typ Secretary und dann werden Sie in der Lage sein, die work() Methode aufzurufen.

2

Was nützt es, eine Klasse zu erweitern, wenn der Elternteil über API-Methoden Bescheid wissen muss? Das vereitelt das Konzept der Abstraktion (was impliziert, dass Sie die Methode für eine als übergeordneten Typ deklarierte Variable aufrufen müssen)

Es ist sinnvoll, die work() -Methode im Parent zu deklarieren, die Klasse abstrakt zu machen und zu implementieren es im Kind.

public abstract class Employee { 
    public abstract void work(); 
} 

public class Secretary extends Employee { 
    public void work() { 
     //Implement here... 
    }; 
} 

public static void main(String[] args) { 
    Employee secretary = new Secretary(); 
    //secretary.work(); 
} 
1

Wenn Sie sagen, Secretary extends Employee bedeutet Secretary Also alle öffentlichen und geschützten Dinge in Employee haben, erwarten Sie nicht, dass Sie alles in Objekt von Employee Typ erhalten wird.

Sie können so etwas tun dies

public abstract class Employee { 
    public abstract void work(); 
} 

public class Secretary extends Employee { 
    public void work() { 
     //Implement here... 
    }; 
} 

ODER

interface Stuff{ 
    void work(); 
} 

class Employee implements Stuff{ 

    @Override 
    public void work() { 

    } 
} 

class Secretary extends Employee { 
    public void work() {} 
}