Die Schnittstelle kann eine Methode nicht überschreiben und die Standardimplementierung [Duplikat] bereitstellen.Java

Java-Forum
Anonymous
 Die Schnittstelle kann eine Methode nicht überschreiben und die Standardimplementierung [Duplikat] bereitstellen.

Post by Anonymous »

Stellen Sie sich zwei Klassen vor, Katze und Hund, die genau das gleiche toString () Implementierung:
teilen

Code: Select all

interface Animal {
String getName();
}

class Cat implements Animal {
private final String name;

public Cat(String name) {
this.name = name;
}

@Override
public String getName() {
return name;
}

@Override
public String toString() {
return "I'm a " + this.getClass().getSimpleName() + " named " + this.getName() + ".";
}
}

class Dog implements Animal {
private final String name;

public Dog(String name) {
this.name = name;
}

@Override
public String getName() {
return name;
}

@Override
public String toString() {
return "I'm a " + this.getClass().getSimpleName() + " named " + this.getName() + ".";
}
}
Es wäre schön, wenn die gemeinsame Methode toString () an die Schnittstelle gezogen werden könnte:

Code: Select all

interface Animal {
String getName();
// Following code is unfortunately invalid
@Override
default String toString() {
return "I'm a " + this.getClass().getSimpleName() + " named " + this.getName() + ".";
}
}
< /code>
Aber leider erlaubt die Sprache nicht, dass Schnittstellen eine Standardimplementierung einer überschriebenen Methode haben. Ich kann eine abstrakte AbstractAnimal 
eine abstrakte Klasse erstellen und sie stattdessen einsetzen, aber sobald meine Katze und Hunde AbstractAnimal erweitern, können sie keine andere Klasse erweitern, was eine unerwünschte Einschränkung darstellt. Abstractanimal hat keinen Zustand, warum kann es also keine Schnittstelle sein? Kann ich andere Möglichkeiten vermeiden, den ToString Code in CAT und Hunde ?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post