2017-09-25 3 views
3
class Parent 
{ 
    def m1() 
    { 
     System.out.println("m1 method"); 
    } 
} 

abstract class Child extends Parent 
{ 
    def m1() 
} 

Der obige Code kompiliert erfolgreich, und meine Frage ist:Warum ermöglicht die Klasse Parent der Klasse Child die Methoden der Elternklasse als Abstract in der Klasse Child?

Warum die Parent Klasse erlaubt die Child Klasse die m1() Methode als abstrakte Methode zu machen?

Wo würden wir diese Art von Szenario verwenden?

+0

Es ist ziemlich seltsam, dass eine abstrakte Klasse eine konkrete Klasse erweitert. Dies ist einer der Fälle, wo es * möglich * sein könnte, aber Sie sollten es wahrscheinlich nicht tun. – puhlen

Antwort

1

Jetzt kann es so passieren, dass Sie mehrere Variationen der Elternklasse erstellen möchten. Da die Elternklasse eine konkrete Klasse ist, ist es sehr schwierig, dies zu erreichen. Weil Sie entweder versuchen können, den Elternteil als abstrakt darzustellen und dann die Implementierung bereitzustellen. Aber wenn die konkrete Klasse an mehreren Stellen Ihrer großen Codebasis verwendet wird, haben Sie keine andere Wahl, als folgendermaßen vorzugehen.

Daher ist die Strategie abstrakt Kind zu schaffen es

abstract class Child extends Parent 
{ 
    def m1() 
} 

class SpecialChild extends Child { 
    //.. some implementation of m1 
} 

nun wie folgt wir

child = new SpecialChild(); 

Hoffnung das macht Sinn, das ursprüngliche Kind geht verwenden können, nach wie vor.

Verwandte Themen