Code: Select all
class Super {
public Object transform(Object t) { ... }
public Object get() { ... }
}
Code: Select all
class Sub extends Super {
public Object transform(Object t) { ... } // override
// The following cases are also considered as method override.
// public String transform(Object t) { ... }
// public List transform(Object t) { ... }
// and so on.
public Object get() { ... } // override
}
Code: Select all
class Super {
public T transform(T t) { ... }
public T get() { ... }
}
Code: Select all
class Super {
public T transform(T t) { ... }
public T get() { ... }
}
< /code>
Definieren Sie nun eine Unterklasse von Super < /code> - sub < /code>: < /p>
class Sub extends Super {
public Object transform(Object t) { ... } // override
// The following cases are also considered as method override.
// public String transform(Object t) { ... }
// public List transform(Object t) { ... }
// and so on.
}
Code: Select all
// after adding get() method to Sub
class Sub extends Super {
public Object transform(Object t) { ... } // override
public Object get() { ... } // error: incompatible return type
}
< /code>
Schließlich überschreibt in der folgenden Code -Methode die Methode Get () in der Unterklasse die Get () -Methode in der Superklasse. Warum kann diese Regel nicht in dem Fall angewendet werden, in dem ich auf den Fehler gestoßen bin?class Super {
public T transform(T t) { ... }
public T get() { ... }
}
class Sub extends {
public Object transform(Object t) { ... } // override
public Object get() { ... } // override!
}