Wie so oft gilt auch hier: frag bei einem Begriff, wer ihn wofür benutzt, und geh nicht davon aus, dass alle Welt die gleichen Begriffe benutzt.
Eine mögliche und recht gängige Begriffswelt wird im Java-Tutorial von Oracle erklärt. Demzufolge gibt es in Java 4 Arten von Variablen: Instanz-Variablen, Klassen-Variablen, lokale Variablen und Methoden-Parameter. "Attribut" ist ein häufig gebrauchtes Synonym für Instanz-Variable, andere Synonyme sind Feld und Eigenschaft (mit etwas Vorsicht zu genießen, weil dieser Begriff oft zusätzlich mit der Existenz von Gettern und/oder Settern verbunden wird), manchmal auch für Klassen-Variable (wobei dann oft explizit darauf hingewiesen wird: "statisches Attribut" oder "Klassen-Attribut" - gilt auch für Feld und Eigenschaft).
In diesem Sinne hast Du Recht mit der Aussage: ein Attribut ist eine Variable. Andere benutzen den Begriff "Variable" aber ausschließlich oder vorrangig für lokale Variablen, dann stimmt die Aussage natürlich nicht mehr. Und umgekehrt ist in manchen Kontexten (.NET-Programmierung zum Beispiel) der Begriff "Attribut" anders belegt (in .NET mit dem Java-Äquivalent zu Annotationen), so dass dort die Aussage auch wieder nicht paßt. Deshalb also: Vorsicht mit Begriffen.
Was aber, soweit ich weiß, allen Variablen-Begriffen gemeinsam ist: Variablen haben einen Typ, einen Namen und einen Wert (der zum Typ paßt; ganz puristisch gesehen: erst ab dem Zeitpunkt ihrer Initialisierung). "Variable" meint immer das Gesamtkonstrukt.
Eine Variable ist ein Ort, der unterschiedliche Zustände annehmen kann. Sie sagt ersteinmal nichts über die Zugehörigkeit zu einem größeren Konstrukt (wie ein Objekt) aus. (http://synonyme.woxikon.de/synonyme/variable.php) Deshalb wird häufig das Wort Klassen-Variable oder Instanz-Variable komponiert um den Geltungsbereich zu definieren, wobei der Begriff "Klassen-Variable" eigentlich in der reinen OO-Welt überflüssig ist, weil eine Klasse auch als Objekt angesehen werden kann. (*.getClass() gibt ein Objekt vom Typ Class<?> zurück) Man könnte "Klassen-Variable" auch als Spezialfall der "Objekt-Variable" ansehen, wenn das haltende Objekt eine Klasse darstellt.
Ein Feld ist wie eine Variable ein Ort, der einen Zustand hat. Ob dieser Zustand wechselt, da schweigt sich der Begriff drüber aus.
Die Orte Variable und Feld HABEN KEINEN, sondern assoziieren den Typ der gültigen Zustände, einen aktuellen Zustand und einen Namen, über den man den Ort adressieren kann.
Attribute und Eigenschaften dagegen sind Zustände, die an einem bestimmten Ort zu einem bestimmten Zeitpunkt existieren und Variablen bzw. Felder ausfüllen. Sie haben einen Namen und einen Typ.
Der Begriff "Eigenschaft" ist aus meiner Sicht dem Attribut-Begriff sehr ähnlich. Der Fokus einer Eigenschaft liegt mehr auf dem Nutzen für den äußeren Betrachter. Deshalb auch die Anspielung von Matthias mit den Gettern und Settern ([...] weil dieser Begriff oft zusätzlich mit der Existenz von Gettern und/oder Settern verbunden wird [...]).
"Wert" ist noch stärker orientiert an den Nutzen als Eigenschaft.