2010-08-25 9 views
7

in java qualsiasi variabile astratta lì? ho lavorato a queste variabili astratte in costruttore sono sicuro, ma penso che il costruttore supporti variabili statiche.pls chiarisca il mio dubbioC'è qualche variabile astratta in java?

+3

Se una variabile può essere "astratta", cosa pensi che significhi? Forse dovresti investigare la tua motivazione. – polygenelubricants

risposta

19

In Java solo classi e metodi possono essere astratti. Le dichiarazioni variabili non possono. Tuttavia puoi avere dichiarazioni variabili di tipi astratti. Vedi l'esempio:

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

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

Sono un principiante Java. Come è permesso? >> istanza pubblica MyClass; // permesso . Non è questa la creazione di un'istanza di una classe astratta? – goldenmean

+2

@goldenmean Non è ancora stato istanziato. istanza pubblica MyClass = new MyClass() genererebbe errori. (se MyClass è astratto) –

7

Il linguaggio Specifacation liste 7 tipi di variabili:

  1. variabili di classe - dichiarati come static all'interno di una dichiarazione di classe
  2. variabili di istanza - inserite in una dichiarazione di classe senza utilizzare la parola chiave statica
  3. componenti dell'array - come i[2] quando creiamo un array come int[] i= new int[5]
  4. Parametri metodo - valori del nome argomento passato a un metodo
  5. parametri del costruttore - Valori nome argomento passato a un costruttore
  6. eccezione-handler parametro - creato ogni viene rilevata un'eccezione
  7. variabili locali - dichiarato in blocco ({ }) o per dichiarazione

È possibile utilizzare tutti i tipi di variabili (ad eccezione di 4 #) in un costruttore:

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 
    } 
} 

Il abstract parola chiave non è consentito per la dichiarazione delle variabili.

0

Esistono due modi per definire le variabili astratte in java senza utilizzare una parola chiave astratta.

1 ° modo: Definire un costruttore con parametri nella classe astratta, qualcosa di simile:

public abstract class TransactionManager { 
    private String separator; 

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

Quando si definisce un costruttore parametrizzata in una classe astratta, le sottoclassi sono costretti a definire i propri costruttori e chiamare il super costruttore, quindi passando il proprio SEPARATORE.

2 ° modo: Definire la proprietà come metodo getter, qualcosa di simile:

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

In questo modo il valore di SEPARATORE proprietà è delegata a essere definito da ciascuna classe concreta.

Fonte: Define an abstract property in java

0

astratta è un modificatore non-accesso in java applicabile per le classi, i metodi ma non variabili.È usato per ottenere l'astrazione che è uno dei pilastri della programmazione orientata agli oggetti.

+0

Hai qualcosa di nuovo nella tua risposta che non è stato menzionato nelle risposte precedenti? –

Problemi correlati