2010-08-25 14 views
7

in Java irgendwelche abstrakte Variablen da? Ich arbeitete diese abstrakten Variablen im Konstruktor ich bin nort sicher, aber ich denke, der Konstruktor unterstützt statische Variablen.pls klären meine ZweifelGibt es abstrakte Variablen in Java?

+3

Wenn eine Variable "abstrakt" sein kann, was bedeutet das dann? Vielleicht solltest du deine Motivation untersuchen. – polygenelubricants

Antwort

19

In Java können nur Klassen und Methoden abstrakt sein. Variablendeklarationen können nicht. Sie können jedoch Variablendeklarationen verwenden, deren Typen abstrakt sind. Siehe Beispiel:

public abstract class MyClass { // allowed 
    public abstract myMethod(); // allowed 
    public MyClass instance; // allowed 

    public abstract MyClass instance; // NOT ALLOWED!! 
} 
+0

Ich bin Java Anfänger. Wie ist das erlaubt? >> öffentliche MyClass-Instanz; // dürfen . Ist das nicht das Erstellen einer Instanz einer abstrakten Klasse? – goldenmean

+2

@goldenmean Es ist noch nicht instanziert. public MyClass instance = new MyClass() würde Fehler werfen. (Wenn MyClass abstrakt ist) –

7

Die Sprache Specifacation Listen 7 Arten von Variablen:

  1. Klassenvariablen - deklariert als statisch innerhalb einer Klassendeklaration
  2. Instanzvariablen - innerhalb einer Klassendeklaration deklariert ohne das statische Schlüsselwort zu verwenden
  3. Array-Komponenten - wie i[2] wenn wir schaffen ein Array wie int[] i= new int[5]
  4. Methodenparameter - name Argumentwerte an eine Methode übergeben
  5. Konstruktorparameter - Werte Name Argument an einen Konstruktor übergeben
  6. Ausnahmebehandlungsparameter - erstellt jeweils Zeit eine Ausnahme abgefangen wird
  7. lokale Variablen - in einem Block deklariert ({ }) oder für Anweisung

Sie können alle Variablentypen verwenden (mit Ausnahme von # 4) in einem Konstruktor:

class Demo { 
    static int demo1 = 0;    // class variable 
    int[] demo2 = new int[5];   // instance variable 
    Demo(int demo3) {     // constructor parameter 
    try { 
     int demo4 =      // local variable 
        demo2[2];   // array component 
    } catch(RuntimeException demo5) { // exception-handler parameter 
    } 
    demo2 = new int[]{Demo.demo1}; // using class and instance variable 
             // in a constructor 
    } 
    int method(int demo6) {    // method parameter 
    } 
} 

Das abstract Schlüsselwort ist nicht für die Deklaration von Variablen erlaubt.

0

Es gibt 2 Möglichkeiten, abstrakte Variablen in Java zu definieren, ohne das abstrakte Schlüsselwort zu verwenden.

1. Weg: eine parametrisierte Konstruktor in der abstrakten Klasse definieren, so etwas wie:

public abstract class TransactionManager { 
    private String separator; 

    public TransactionManager(String separator) { 
     this.separator = separator; 
    } 
} 

Wenn eine parametrisierte Konstruktor in einer abstrakten Klasse definiert, werden die Unterklassen gezwungen, ihre eigenen Konstrukteuren zu definieren, und rufen Sie die Superkonstruktor, daher ihre eigenen SEPARATOR übergeben.

2. Art und Weise: Definieren Sie die Eigenschaft als Getter-Methode, so etwas wie:

public abstract class TransactionManager { 
    public abstract String getSeparator(); 
} 

Auf diese Weise wird der Wert von SEPARATOR Eigenschaft delegiert wird von jeder konkreten Klasse definiert werden.

Quelle: Define an abstract property in java

0

abstrakt ist ein nicht-Zugriffsmodifikator in Java anwendbar für Klassen, Methoden, aber keine Variablen.Es wird verwendet, um Abstraktion zu erreichen, die eine der Säulen der objektorientierten Programmierung ist.

+0

Haben Sie etwas Neues in Ihrer Antwort, das in früheren Antworten nicht erwähnt wurde? –

Verwandte Themen