Warum können wir nicht Instanziierung einer abstrakten Klasse in JAVA?
Verstehe ich:
- Da Abstrakte Klasse sind gar nichts auf Ihre eigene, d.h. Fahrzeug, das ist, warum wir wollen, erstellen Sie ein Objekt einer konkreten Implementierung wie Auto,Fahrrad etc.
- Konstruktor einer Abstrakten Klasse wird aufgerufen, während der Objekt-Verkettung.
- Können wir nie direkt erstellen eines Objekts der Abstrakten Klasse, auch wenn es enthält einen Konstruktor und alle Methoden implementiert,
warum ?
Ich bin auf der Suche zu verstehen, aus Compiler-Sicht, warum Java zwingt diese ?
Dank
Wenn der Autor gewollt hätte, Sie in der Lage sein zu instanziieren, Sie hätten es nicht-abstrakte. Die Tatsache, dass Sie nicht -- selbst wenn Sie es Taten implementieren alle Methoden-ist eine software-Architektur Wahl, erzählen Sie Ihnen, dass Sie nicht glauben, dass die Verwendung der default-Implementierung Sinn macht. Sie Fragen, warum, oder akzeptieren Sie es und erstellen Sie eine Unterklasse.
Ok..............
Sie können es nicht, weil der Autor markiert die Klasse als
beste Antwort stackoverflow.com/questions/13670991/...
Ok..............
Sie können es nicht, weil der Autor markiert die Klasse als
abstract
, und das ist Teil der Bedeutung des Wortes in Java.beste Antwort stackoverflow.com/questions/13670991/...
InformationsquelleAutor sandejai | 2014-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist keine technische Einschränkung, sondern (wie Sie darauf hingewiesen hast) eine logische eins. Java (und vielen anderen Sprachen) die Durchsetzung verschiedener Regeln, nicht weil Sie unmöglich zu brechen, aber da dies ist eine absichtliche Teil der Sprache.
iser : Danke, ich Denke, es ist mehr wie eine Regel, warum es denn von der Konzeption, so dass compiler zu zwingen den Fehler...
InformationsquelleAutor Eli Iser
Einer abstrakten Klasse ist nicht vollständig! Der Autor markiert es Abstrakt zu sagen, Sie, dass einige Umsetzung fehlt im code. Der Autor hat getan einige Arbeit, aber Sie müssen füllen Sie einige bits sich, um es arbeiten. Die
abstract
- Schlüsselwort stellt sicher, dass niemand würde versehentlich initiieren diese unvollständige Klasse.Denken Sie an die Reparatur eines Autos. Hat jemand entfernt, die Bremsbeläge und ersetzen Sie Sie in den nächsten Tag. Nun, zu verhindern, dass jemand versehentlich dieses Auto fahren(die hat keine Bremsen eingebaut), der Mechaniker baut eine Sperre für das lenkrad. Es ist eine fail-safe-Messen.
InformationsquelleAutor kevin
rocketboy zeigt einige mechanistische Gründe, aber es gibt einen konzeptionellen Grund.
Eine Abstrakte Klasse repräsentiert ein abstraktes Konzept. Nehmen Sie Ihr Fahrzeug Beispiel. Sie können nicht bauen ein Fahrzeug, das nicht etwas mehr spezifisch. Sie können eine Reihe von Fahrzeugen, die gemacht werden könnten, 2004 corolla ' s und '98 ford escorts, und 1984 cs36 (eine Art yacht), ein mark 4 firefly-Klasse mid-range-bulk-transport(mit Stabilisatoren), können Sie eines der individuell und nennen Sie ein Fahrzeug, aber Sie können nicht etwas haben, das nur ein Fahrzeug und nicht einer von denen oder einige andere spezifische Art von Fahrzeug.
Abstrakte Klassen stellen eine solche abstrakte Konzepte als Fahrzeug. Daher die Idee der Instanziierung ist nicht unsinnige, weil tatsächlich zu instanziieren, müssen Sie wissen, was Sie instanziieren.
InformationsquelleAutor Taylor
Wenn eine Klasse markiert mit abstract-Schlüsselwort heisst es dann abstrakte Klasse. Es kann NICHT instanziiert werden mittels new-operator. Aber eine abstrakte Klasse kann verwendet werden, die als Oberklasse die Referenz für die Unterklasse-Objekt
Einer Klasse, die NICHT eine abstrakte Klasse konkrete Klasse
Es gibt so viele abstrakte Klassen in der Java-API und die meisten von Ihnen sind in der GUI-Bibliothek und Sammlungen-Framework
Einer abstrakten Klasse muss erweitert werden, und eine abstrakte Methode muss überschrieben werden,
Wenn eine Methode deklariert wird, mit dem Schlüsselwort abstract, dann sollte es KEINE Körper. Nur er kann Namen, Parameter und Rückgabetyp, NICHT aber den Körper
Wenn Sie eine abstrakte Methode, dann wird die Klasse deklariert werden muss, wie abtracr als gut, d.h. eine konkrete Klasse kann KEINE abstrakten Methoden, nur eine abstrakte Klasse kann abstrakte Methoden
Zusammen mit dem abstrakte Methoden eine abstrakte Klasse kann auch Instanz-Mitglieder, die Instanz-Initialisierung, Konstruktoren, statische Initialisierungen und statische Elemente. Hier die Instanz-Konstruktoren und Initialisierer von der abstrakten Klasse würde aufgerufen werden, wenn die Unterklasse von der abstrakten Klasse instanziiert werden und der statische Initialisierer von der abstrakten Klasse wird aufgerufen, wenn die abstrakte Klasse geladen werden, die von der JVM
Wenn eine konkrete Klasse erweitert die abstrakte Klasse dann muss es überschreiben alle abstrakten Methoden der abstrakten Oberklasse und dies wird als die Umsetzung einer abstrakten Klasse
Für die teilweise Umsetzung einer abstrakten Klasse können wir eine abstrakte Unterklasse erweitert die abstrakte Oberklasse. In dieser situation der Unterklasse überschreiben alle abstrakten Methoden der abstrakten Superklasse ist NICHT notwendig. Die teilweise Implementierung des abstrakten Superklasse oder ein interface kann nur von abstrakten Klassen. Eine konkrete Klasse kann NICHT verwendet werden, für die teilweise Umsetzung einer abstrakten Klasse, weil die konkreten Klassen können KEINE abstrakten Methoden
Abstrakte Klassen und abstrakte Methoden können NICHT erklärt werden mit dem Schlüsselwort final, d.h. eine Klasse kann Abstrakt oder final ist ebenso eine Methode kann die Kurzfassung der letzten
Abstrakte Methoden können NICHT erklärt werden mit dem Schlüsselwort private
Abstrakte Methoden können NICHT erklärt werden mit dem Schlüsselwort synchronized. Auch benötigen Sie eine Thread-sichere Methode, die dann bei der Implementierung der abstrakten Klasse (wenn die abstrakte Methode überschrieben werden, indem die konkrete Unterklasse die überschriebene Methode kann gekennzeichnet werden mit dem Schlüsselwort synchronized
Abstrakte Methoden können NICHT markiert werden mit dem Schlüsselwort static. Da statische Methoden können NICHT überschrieben werden, nur Sie kann versteckt werden, indem die Unterklasse statische Methoden
Abstrakte Methode kann NICHT markiert werden, mit dem Schlüsselwort native
Abstrakte Methode kann NICHT markiert werden mit dem Schlüsselwort strictfp
Nur So können Sie die access modifier (anders als private), Typ, parameter mit einer abstrakten Methode
Eine konkrete Klasse kann NICHT Instanz-Methoden, sondern eine abstrakte Klasse kann abstrakte Methoden, statische member, Instanz-Mitglieder, statische Initialisierungen, Konstruktoren und Instanz-Initialisierer
Wenn eine abstrakte Klasse eine Schnittstelle implementiert oder die abstrakte Klasse erweitert eine andere, dann ist es NICHT notwendig, dass es überschreiben muss alle abstrakten Methoden des interface. Aber dies ist NICHT identisch mit der konkreten Klassen
Kann es auch passieren, dass eine abstrakte Klasse hat KEINE abstrakten Methoden
Eine abstrakte Klasse kann NICHT instanziiert werden mittels new-operator. Weil eine abstrakte haben können abstrakte Methoden, d.h. Methoden ohne Körper (oder der Durchführung). Denn ein Objekt kann NICHT über eine abstrakte Methoden und JVM kann NICHT Speicher abstrakten Methoden
InformationsquelleAutor alexvipul
Da eine Abstrakte Klasse ist eine Skelett-Struktur(ein unvollständiges Konstrukt, wenn Sie können), daher der Begriff Abstrakt.
Bedeutet, dass jeder
Person
sprechen muss. Das bedeutet, dass jeder Mensch sollte wissen, wie zu sprechen (Umsetzung derspeak()
).new Person()
nicht, also ist es nicht erlaubt.Ja, es funktioniert nicht. War es einfach benutzen, um zu demonstrieren.
Die OP ist ausdrücklich aufgefordert, über eine abstrakte Klasse ohne eine abstrakte Methode ("selbst wenn es enthält einen Konstruktor und alle Methoden implementiert")
InformationsquelleAutor rocketboy
Können Sie nicht instanziieren, die eine Schnittstelle oder eine abstrakte Klasse, denn es würde trotzen der Objekt-orientierten Modell. Lesen Sie mehr
InformationsquelleAutor Sunil S
Dem, was ich verstehe, dass Abstrakte Klassen enthalten abstrakte (leere ohne Umsetzung) Methoden. Wenn wir instanziieren ein Objekt, und rufen Sie die leere Methode, wird Es nicht funktionieren und kann zu Problemen führen, daher compiler erzwingt diese REGEL.
weitere in-sighter ?
InformationsquelleAutor sandejai
abstract es selbst sagt : bestehende, in Gedanken oder als Idee, aber nicht mit einem physischen oder konkrete Existenz.
In java-Begriff , abstract, keyword-definition , wenn abstract vor der name einer Klasse, dann JDK, sagt JVM zu verwerfen, dass class-Objekt der initiation.
Es ist richtig, abstrakte Klasse kann mehrere Konstruktor aber nur für Konstruktor-Verkettung.
InformationsquelleAutor Rudra
Eine Abstrakte Klasse ist eine Klasse, die als Abstrakt deklariert. Es kann oder auch nicht abstrakte Methoden.
Müssen wir erklären, Abstrakten Klassen und Abstrakten Methoden mit dem Schlüsselwort abstract.
Abstrakte Klassen können nicht instanziiert werden, das heißt, wir können nicht erstellen Sie ein Objekt der Abstrakten Klasse. Wir erstellen von Unterklassen von Abstrakten Klassen.
Eine Abstrakte Klasse, vielleicht oder vielleicht auch nicht-abstrakte Methoden, abstrakte Methode in dem Sinne kann eine Methode deklariert, ohne jede Körper-Implementierung heißt abstrakte Methode. Also in diesem Fall die JVM nicht wissen, wie viel Speicher Sie hat zum reservieren für das abstrakte Methode abstrakte Methode nicht Körper-Umsetzung. So JVM wird nicht in der Lage, reservieren Sie Speicher für die abstrakten Methoden wenn die Zeit der Erstellung Instanz der Abstrakten Klasse. So JVM nicht anlegen die Instanz der Abstrakten Klasse. Also, wir können nicht erstellen Sie das Objekt, für das der Abstrakten Klasse.
Ist es auch möglich, dass wir erstellen eine Abstrakte Klasse mit konkreten Methoden, die ohne abstrakte Methoden auch. In diesem Fall können auch wir nicht schaffen die Instanz für die Abstrakte Klasse. Warum, weil das abstract-Schlüsselwort einfach nur an, JVM, dass die Klasse nicht instanziiert werden kann.
Sich die Designer von Java aus die JVM, die, wenn Sie es finden, abstract-Schlüsselwort für jede Klasse dann die JVM kann nicht erstellen Sie die Instanz für die Klasse.
InformationsquelleAutor Sumedh Tambat
Kann man nicht instanziieren abstrakte Klasse, weil es einfach zu geben, eine Struktur, die Ihre Klasse, die Sie erweitern Sie.
Und wenn Sie möchten, initiieren Sie Ihre Klasse dann, warum Sie wollen, es zu definieren, wie abstrakte?
InformationsquelleAutor Ankita P.
sehr einfachen Grund jvm spielen, um uns zu beschränken, zu instanziieren, abstrakte Klasse und interface.
Davon ausgehen compiler erlauben uns zu instanziieren beide ok.
Also nehmen wir an meine abstrakte Klasse enthält 5 abstrakte Methode bedeutet, dass nur Prototyp-Methode keine Methode Körper.
So, wie wir wissen, dass jeder Methodenaufruf durch die Erstellung einer separaten stack in der jvm-Java-stack-Bereich
Dass die Speicherreservierung geschehen ist, basierend auf Methode, Struktur
und nach dem ausführen dieser Stapel ist die Zerstörung Recht.
Also, wenn meine Methode nicht enthält jeder Körper bedeutet, wie kann jvm vorherzusagen, Speicher zu reservieren, die Methode
Zweite, wenn kein Körper bedeutet, dass keine Methode der Ausführung so nie und wird es zerstören, aus Ihren Java-stack-Bereich kann es eine chance sein kann u get memoryout Fehler.
So, dass diese 2 Fall-compiler, uns zu beschränken, zu instanziieren und Schnittstellen abstrakte Klasse
InformationsquelleAutor naila naseem
Weil Java eingeschränkt, das ist, warum wir können nicht instanziiert der abstrakten Klasse. Da in der Regel Szenario Abstrakt bedeutet unvollständig, so können wir nicht machen der Objekt unvollständiger Dinge.Wir haben die komplette Umsetzung einer abstrakten Klasse eine konkrete Klasse. Aber wir können nicht erstellen Sie das Objekt einer abstrakten Klasse.
Private Konstruktoren werden in Singleton-Klassen, um zu vermeiden, Objekt-Erstellung von anderswo
InformationsquelleAutor Bharti Rawat
Da eine abstrakte Klasse ist eine unvollständige Klasse (unvollständig in dem Sinne, es enthält abstrakte Methoden ohne Körper-und Ausgabe), können wir erstellen eine Instanz oder ein Objekt; das gleiche wie Sie sagen, für eine Schnittstelle.
InformationsquelleAutor Sonu patel
KÖNNEN Sie abstrakte Klasse instanziiert werden. Sie brauchen nur eine konkrete Unterklasse.
InformationsquelleAutor Srinath Shah
Naja, eigentlich können Sie aber nur, wenn Sie implementieren alle Methoden deklariert wurden abstrakte oder weggelassen.
Hinzugefügt
Den
IA
Klasse instanziiert ein Objekt derI
abstrakte Klasse und implementiert dienext
Methode fehlte, aus derI
Klasse. Sie erstellen ein Objekt einer anonymen, die die implizierte abstrakte Methode.Ich sehe nicht, wie das hat nichts zu tun mit dem, was der OP wünscht, oder wo es die Instanziierung einer abstrakten Klasse (da Sie das nicht können)
InformationsquelleAutor OldCurmudgeon
Der Grund, warum Java nicht erlaubt, eine abstrakte Klasse, die instanziiert werden sollen, ist logisch. Wir haben nicht die definition einer Methode und daher, wenn es hatte allowd der Erstellung des Objekts, gibt es keine Rückkehr-Adresse, an die pop-Funktion aus dem Stapel, und wir erhalten somit, stecken. So ist es nur sinnvoll, nicht zulassen, dass das Objekt instattion.
InformationsquelleAutor user1345619