2 weitere kurze Fragen

Hi,
ich benötige erneut eure Hilfe und wäre euch sehr verbunden, wenn ihr mir weiterhelfen könnt.

Frage 1: Welche Aussage trifft zu?
public class Lebewesen {
private String name;
public String toString() {
return (name);
}
}

public class Mensch extends Lebewesen {
private char geschlecht;
public String toString() {
return (super.toString() + " Geschlecht: " + geschlecht);
}
}

a) toString() wird überladen
b) toString() liefert einen Compilerfehler, weil super falsch verwendet wird
c) toString() liefert einen Compilerfehler, weil die Attribute name und geschlecht private sind
d) toString() wird überschrieben


Ich denke, dass es entweder a) oder d) sein müssen. Jedoch kenne ich mich mit den Java Thermen nicht so gut aus


Frage 2: Welche Aussage ist falsch?
a) Eine Klasse kann mehrere Interfaces implementieren
b) Ein Interface kann als Datentyp einer Variablen verwendet werden
c) In einem Interface darf es implementierte Methoden geben
d) Eine Klasse kann ein Interface implementieren und zusätzlich von einer anderen Klasse erben



Ich danke euch wieder mal 1000 mal im Voraus.
 
K

kneitzel

Gast
Bei der zweiten Frage muss man aber etwas drauf eingehen denke ich mal, denn die Aussagen sind ja (aktuell) alle richtig:

a) Eine Klasse kann mehrere Interfaces implementieren
Dass dies geht, sollte klar sein.

b) Ein Interface kann als Datentyp einer Variablen verwendet werden
Auch klar - einfaches Beispiel: List<String> myList = new ArrayList<>();
=> List<T> ist ein Interface und das ist hier der Datentyp der Variable myList.

c) In einem Interface darf es implementierte Methoden geben
Geht auch - Änderung kam mit Java 8 und nennt sich default method: https://dzone.com/articles/interface-default-methods-java

d) Eine Klasse kann ein Interface implementieren und zusätzlich von einer anderen Klasse erben
Das ist auch möglich.

Ein Beispiel, das die Punkte A, C und D enthält (B hatte ich ja schon ein Beispiel):
A.java (Interface mit Implementation einer Methode)
Java:
interface A {
  default void defaultMethod() { System.out.println("default Method"); }
}

SuperClass.java:
Java:
public class SuperClass {
}

ExampleClass.java
Java:
public class ExampleClass extends SuperClass implements A {
}

Und lässt sich problemlos übersetzen mit
javac A.java SuperClass.java ExampleClass.java
 
K

kneitzel

Gast
Ach - mehrere Interfaces hatte ich vergessen ... daher noch:
B.java
Java:
interface B {
  void doB();
}

Und ExampleClass dann halt:
Java:
public class ExampleClass extends SuperClass implements A,B {
  public void doB() {}
}
 
Bei der zweiten Frage muss man aber etwas drauf eingehen denke ich mal, denn die Aussagen sind ja (aktuell) alle richtig:

a) Eine Klasse kann mehrere Interfaces implementieren
Dass dies geht, sollte klar sein.

b) Ein Interface kann als Datentyp einer Variablen verwendet werden
Auch klar - einfaches Beispiel: List<String> myList = new ArrayList<>();
=> List<T> ist ein Interface und das ist hier der Datentyp der Variable myList.

c) In einem Interface darf es implementierte Methoden geben
Geht auch - Änderung kam mit Java 8 und nennt sich default method: https://dzone.com/articles/interface-default-methods-java

d) Eine Klasse kann ein Interface implementieren und zusätzlich von einer anderen Klasse erben
Das ist auch möglich.

Ein Beispiel, das die Punkte A, C und D enthält (B hatte ich ja schon ein Beispiel):
A.java (Interface mit Implementation einer Methode)
Java:
interface A {
  default void defaultMethod() { System.out.println("default Method"); }
}

SuperClass.java:
Java:
public class SuperClass {
}

ExampleClass.java
Java:
public class ExampleClass extends SuperClass implements A {
}

Und lässt sich problemlos übersetzen mit
javac A.java SuperClass.java ExampleClass.java
Cool, danke für die Antwort. Aber eines davon muss falsch sein, dass heißt ich muss eines auswählen. Welches macht daher am meisten Sinn auszuwählen?
 

Neue Themen


Oben