Cerchiamo di fare un po' più di luce.
La differenza fra metodi statici e non statici mi pare tu l'abbia afferrata: i metodi non statici agiscono (e possono, quindi, essere invocati) solo su istanze di quella particolare classe, mentre i metodi statici non necessitano di alcuna istanza, poichè possono essere invocati direttamente con il nome della classe.
Il fatto che un metodo sia statico non configura nessuna particolarità, se non il fatto che possa essere invocato direttamente con il nome della classe, senza alcuna istanza presente. Esempio:
codice:
// Ottengo un numero casuale compreso fra 0 e 1
double casuale = Math.random();
Il metodo random() è statico, non serve quindi che io istanzi un oggetto della classe Math per poterlo usare... ma il fatto che sia statico non mi dice nulla se non questo. Non si configura un ruolo particolare di quel metodo, se non quello per cui è stato scritto: fornire un numero casuale.
Andiamo oltre.
Cosa significa "istanziare un oggetto"? Significa ottenere, appunto, un'istanza precisa di un determinato tipo.
La classe Integer rappresenta un numero intero. Istanziare un Integer significa creare un oggetto di tale classe, che rappresenta un particolare numero intero:
codice:
Integer pippo = new Integer( 5 ); // Istanzio un oggetto Integer che rappresenta il numero 5
Integer pluto = new Integer( -2 ); // Istanzio un oggetto Integer che rappresenta il numero -2
Ho creato due istanze della classe Integer: pippo e pluto.
Cosa vuol dire istanziare una NetworkInterface? Quello che stavi cercando di fare tu... ovvero, ottenere un oggetto di tale classe (per farne cosa, non lo so). Come posso fare, se la classe non possiede costruttori pubblici? Devo controllare fra i suoi metodi statici se ce ne sono alcuni che mi restituiscono un oggetto di tipo NetworkInterface... e controllando la lista dei metodi della classe, si scopre che vi sono solo quei tre lì.
Detto questo, non avevi detto affatto una cosa sbagliata... magari ti mancava un appiglio, ma il succo è proprio quello. Se non ci sono costruttori, gli unici modi per ottenere un oggetto di una determinata classe sono solo 2:
1) Un metodo static che restituisca un'istanza di tale classe
2) L'esistenza di una classe diversa (chiamata "Factory") che possieda un metodo (probabilmente statico, ma non necessariamente) che restituisca un'istanza di quell'oggetto.
Un esempio di classe Factory è la classe BorderFactory che permette di ottenere istanze della classe Border (che non è istanziabile altrimenti).
Ciao.