Ho una domanda su un modo subdolo per ottenere l'accesso ai membri di accesso ai pacchetti che mi sono venuti in mente. Nello specifico, voglio estendere una classe, chiamiamola com.acme.Foo
, per aggiungere alcune funzionalità. Questa è pura aggiunta: tutti i metodi attuali di Foo
sarebbero supportati solo delegando al metodo della superclasse. Tuttavia, non esiste un costruttore accessibile di Foo
, quindi non posso estendere la classe e la mia implementazione non supererà il test "isA" per essere un Foo
. Non esiste un'interfaccia che esprima Foo
-ness che posso utilizzare al posto dell'ereditarietà.Ottenere l'accesso ai membri di accesso al pacchetto creando lo stesso nome di pacchetto
Questo è dove il pensiero subdolo mi venne in mente: Foo
ha un costruttore pacchetto di accesso, quindi perché non solo creare un pacchetto com.acme
nella mia cartella di origine e creare una classe InheritableFoo
in quel pacchetto:
package com.acme;
public class InheritableFoo extends Foo {
public InheritableFoo() {
super();
}
}
Ora posso implementare la mia estensione su Foo
estendendo InheritableFoo
, poiché questo ha un costruttore accessibile.
Questo sembra tutto sbagliato, e in qualche modo immorale: non sto rispettando la decisione presa dal programmatore originale quando lui o lei ha deciso di non esporre un costruttore per . Ma potrebbe essere il caso che hanno semplicemente adottato l'approccio "nega tutto fino a che non c'è un motivo". In ogni caso, c'è qualcosa di fondamentalmente sbagliato in questa idea? Avrò problemi in futuro se seguirò questa strada e, in tal caso, perché?