# Theoriefragen richtig beantwortet?



## javac- (8. Jun 2016)

Hallo, 

wir sollten ein paar Theoriefragen beantworten und ich bin mir bei ein paar nicht sicher. 

1)Was ist der Unterschied zwischen Array und List?
    Array hat feste größe Liste nicht

2) Wie kann man die Länge eines Arrays dynamisch ändern?
    k.A. indem ich eine Liste verwende?

3)Unterschied zwischen Aggregation und Komposition?
Aggregation: Teile können einzeln existieren|Ehepartner nach Scheidung
Komposition: Das eine kann nur mit dem anderen existieren|Stockwerk nur im Haus

4)Wann verwendet man “ static ”?
    Wenn man auf das Attribut/Methode auch zugreifen will ohne ein Objekt anzulegen

5)Was ist der Unterschied zwischen globalen und lokalen Variablen einer Klasse?
   Zugriff global über Klassenname z.b. Tier.getAnzah(), zugriff lokal über instanz z.b. kuh.getName()

6)Erkläre überschreiben und überladen. Kann man beides gleichzeitig?
   Ja kann man. Überladen ->unterschiedliche Parameter, Überschreiben -> Fkt. der    Methode     ändern

7)
Ist es möglich in Java einen Operator benutzerspezifisch zu überladen, also eigentlich zu
überschreiben?
Nein geht nicht

8) Unterschied zwischen Interace und abstrakte Klassen?
Abstrakte Kl. können auch fertig implementierte Methoden. haben, Interface nicht. 
Von abstr. Kl. kann man erben, von Interface nicht. 

9)
Was ist der Unterschied zwischen “ javac ” und “ java ” in der Commandline
/ Terminal?
Hier hab ich keine Ahnung


Kann man meine Antworten so durchgehen lasssen? Bei Nr. 9 bräuchte ich Hilfe

Danke


----------



## Java20134 (8. Jun 2016)

javac kompiliert die .java Datei in eine .class Datei und mit java kannst du dann die .class Datei ausführen lassen.


----------



## javac- (8. Jun 2016)

Danke...die anderen Antworten stimmen soweit?


----------



## thecain (8. Jun 2016)

javac- hat gesagt.:


> 8) Unterschied zwischen Interface und abstrakte Klassen?
> Abstrakte Kl. können auch fertig implementierte Methoden. haben, Interface nicht.
> Von abstr. Kl. kann man erben, von Interface nicht.


 ein Interface kann von einem Interface erben.
Interfaces können default implementierungen haben seit Java 8

Jedoch kann man von mehrere Interfaces auf einer Klasse verwenden, aber nur von einer abstrakten Klasse Erben


----------



## JStein52 (8. Jun 2016)

javac- hat gesagt.:


> 8) Unterschied zwischen Interace und abstrakte Klassen?
> Abstrakte Kl. können auch fertig implementierte Methoden. haben, Interface nicht.
> Von abstr. Kl. kann man erben, von Interface nicht.


Eine Klasse kann mehrere Interfaces implementieren aber nur von einer (abstrakten) Klasse erben.


----------



## Java20134 (8. Jun 2016)

Zu zweitens: Indem du ein neues Array erzeugst
Zu viertens: Wenn die Variable für die Klasse immer den gleichen Wert hat

Und Interfaces können auch fertige Methoden besitzen!


----------



## javac- (8. Jun 2016)

Java20134 hat gesagt.:


> Und Interfaces können auch fertige Methoden besitzen!



In unserem Skript steht:


> Ein Interface enthält die Definition von Methodenköpfen (bzw. Methodensignaturen).
> -In keinem Fall enthält es eine Implementierung
> -Bespiel:
> public interface Runnable {
> ...


----------



## thecain (8. Jun 2016)

Dann ist euer Skript pre Java 8


----------



## mrBrown (8. Jun 2016)

javac- hat gesagt.:


> In unserem Skript steht:


Dann ist euer Script falsch bzw nicht auf dem neustem Stand, seit Java 8 sind default-Implementierungen möglich .


----------



## coco07 (8. Jun 2016)

Java20134 hat gesagt.:


> Zu zweitens: Indem du ein neues Array erzeugst
> Zu viertens: Wenn die Variable für die Klasse immer den gleichen Wert hat
> 
> Und Interfaces können auch fertige Methoden besitzen!



Zu zweitens: Genau, Größe nur durch die Instanziierung eines neuen Arrays änderbar.
Zu viertens: Java20134: Leider falsch! Du verwechselst static mit final... Statischer Kontext ist außerhalb einer Instanz über den Klassennamen verfügbar. Kann auch sein, dass du etwas anderes meinst, aber dann hast du dich etwas unglücklich ausgedrückt.

Fertige Methoden hört sich komisch an. Methoden mit einer default-Implementierung ist besser.


----------



## stg (9. Jun 2016)

coco07 hat gesagt.:


> Zu zweitens: Genau, Größe nur durch die Instanziierung eines neuen Arrays änderbar.


Mit anderen Worten: Gar nicht! Einmal instanziiert kann die Größe eines Arrays nicht mehr verändert werden. Man kann nur der Variablen, die auf das Array zeigt, ein neues Array mit anderer Größe zuweisen. Dann muss man aber, sofern gewünscht, den Inhalt des alten Arrays in das neue kopieren.

Noch ergänzend zu 8:
Der wesentliche Unterschied besteht darin, dass ein Interface (default Implementierungen hin oder her) stets nur die _öffentliche_ Schnittstelle definert.
Abstrakte Klassen besitzen zudem einen Konstruktur und einen _inneren_ Zustand, mit dem man arbeiten kann.


----------



## mrBrown (9. Jun 2016)

coco07 hat gesagt.:


> Zu viertens: Java20134: Leider falsch! Du verwechselst static mit final... Statischer Kontext ist außerhalb einer Instanz über den Klassennamen verfügbar. Kann auch sein, dass du etwas anderes meinst, aber dann hast du dich etwas unglücklich ausgedrückt.



Das klingt nach unglücklich ausgedrückt.
statische Felder gibt es nur einmal innerhalb des Programms - es ist also für alle gleich.
finale Felder können für jede Instanz unterschiedlich sein - sind aber fest und lassen sich nicht ändern.


----------



## da921610 (9. Jun 2016)

Die 5 geht in eine komplett falsche Richtung.
Globale Variablen stehen in der ganzen Klasse zur Verfügung. Lokale Variablen nur in dem Bereich, indem sie erzeugt werden:


```
public class Demonstativ {
   
//    Global und in der ganzen Klasse verfügbar
    private int x;
   
//    Konstruktor
    public Demonstativ() {
        x = 5;
    }
   
//    Beispielmethode
    private void foo() {
//        a ist lokal und nur in der Methode verfügbar
        int a = 3;
        System.out.println(x+a);
       
        if (a==4) {
//            b ist auch lokal und nur im IF-Block verfügbar
            int b = 1;
            System.out.println(b+a);
        }
       
       
    }

}
```


----------



## mrBrown (9. Jun 2016)

da921610 hat gesagt.:


> Globale Variablen stehen in der ganzen Klasse zur Verfügung.



Das sind Instanzvariablen, global wäre `public static`, ist aber eine aber in Bezug auf Java auch eine eher ungünstige Frage^^


----------

