Verwendung von abstrakten Klassen

Status
Nicht offen für weitere Antworten.

andreas2505

Bekanntes Mitglied
Hallo,

ich habe folgendes Problem:
Ich habe ein Projekt mit zwei abstrakten Klassen (A1,A2), welche das Interface (I) implementieren. Nun habe ich eine weitere Klasse K, in der ich Methoden von den beiden abstrakten Klassen aufrufen will. Ich weiß bereits dass ich keine Objekte von den abstrakten Klassen erzeugen kann, aber wie kann ich die Methoden von den abstrakten Klassen aufrufen.

Bitte um Befehle, oder um Struktur (wie ich es schreiben muss)
 

icarus2

Top Contributor
Da ich nicht genau weiss was du machen willst bin ich mir nicht sicher ob das eine clevere Idee ist, aber wenn du in der abstrakten Klasse statische Methoden deklarierst, kann du sie über den Klassennamen aufrufen und nicht über ein Objekt.

A1.MethodenName();
A2.MethodenName();

Was möchtest du den genau machen?


Edit:
Wenn du die Klasse K von einer der beiden Klassen ableitest, kannst du jede die Methoden, die nicht als private deklariert sind, verwenden ohne ein Objekt der Klasse aufzurufen. Dafür werden abstrakte Klassen meistens verwendet.

Z.B. Eine abstrakte Klasse Tier, die durch konkrete Klassen wie Hund, Katze erweitert wird.
 

andreas2505

Bekanntes Mitglied
Also, ich will mit dem Programm etwas verschlüsseln.
Ich erzeuge z.B. mit der einen Methode schlüssel die ich weiter verwenden muss. wenn ich dann die anderen Methoden aufrufe zum Weiterarbeiten, kann ich dann sicher gehen, dass auch weiterhin die Schlüssel verwendet werden?

Muss ich im Programmkopf noch irgendwas mit extend oder implements deklarieren oder so
 

icarus2

Top Contributor
Hmm, ich kenne mich leider mit Verschlüsselung kaum aus... ich denke dieser Schlüssel wird irgendwo gespeichert? Solange du mit dem Schlüssel arbeitest denke ich müsste es klappen.

Poste doch sonst mal etwas Quellcode.

extends ist eine Klasse zu erweitern/ von einer Klasse zu erben
implements ist da, um ein Interface zu implementieren

z.B.
[Java]
public class A extends B implements C {

....
}
[/Java]
 

andreas2505

Bekanntes Mitglied
Ja das weiß ich schon.

Bei dem Programm müssen bestimmte Methoden immer drin sein in den Klassen, deshalt habe ich sie abstrakt gemacht und ein interface gemacht wo die Methoden drin sind, die es enthalten soll. Und dann soll es halt eine Klasse geben, wo die Methoden aufrufbar sind und wo der Benutzer sagen kann was mit den beiden anderen Klassen gemacht werden soll.

Wie würdest du das aufbauen?
 

icarus2

Top Contributor
Sag mal was für 2 abstrakte Klassen du hast... sind es Klassen, die verschiedene Schlüssel haben? Im moment kann ich mir zu wenig vorstellen was diese Klassen machen.
 

andreas2505

Bekanntes Mitglied
ja das sind zwei klasse die verschiedene Methoden haben, aber die zusammen in der dritten klasse arbeiten um etwas zu verschlüsseln.
Ich kann dir ja mal die eine Klasse schicken:

/**
*Autor: Andreas Witt
*Zeitraum: 13.07.09-21.08.09
*Hier wird das RSA Modul implementiert
*/

import java.util.*;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.io.*;

abstract public class AsymKS implements Schnittstelle
{
private final static BigInteger one = new BigInteger("1");
private final static SecureRandom random = new SecureRandom();

private BigInteger privateKey;
private BigInteger publicKey;
private BigInteger modulus;
private BigInteger[] cipher;



/**
* Konstruktor von RSA
*/
public AsymKS()
{
}

/** schreibt eine Datei "keys.txt", in der die Strings var1 und var2 ausgegeben werden
* Wichtig: nur Typ String zulässig (andere Datentypen müssen also vorher in String konvertiert werden
*/

public void writeFile(String var1, String var2) {
String fileName = "keys.txt";
String var1String = var1.toString();
String var2String = var2.toString();
try {
BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
out.write(var1String);
out.newLine();
out.write(var2String);
out.close();
} catch (IOException e) {
}
}


/** generiert einen 1024-bit großen public und private key
* weiterhin werden diese Keys direkt in eine Datei "keys.txt" geschrieben
*/
public void createKeys() {
int n = 1024;
BigInteger p = BigInteger.probablePrime(n/2, random); //Methode, die mit einer Warscheinlichkeit von 2 hoch -100 eine Zufallsprimzahl der Länge n/2-bit erzeugt//
BigInteger q = BigInteger.probablePrime(n/2, random);
BigInteger phi = (p.subtract(one)).multiply(q.subtract(one));
modulus = p.multiply(q);
publicKey = BigInteger.probablePrime(n, random);
privateKey = publicKey.modInverse(phi);
String publicKeyString = "PublicKey = "+publicKey.toString();
String privateKeyString = "PrivateKey = "+privateKey.toString();
writeFile(publicKeyString, privateKeyString);
}

/** liest gewünschten Key aus der Datei "keys.txt" aus
* Wichtig: nur eine Eingabe von "public" liest den publicKey
* jede anderer Eingabe liest den privateKey au
*/

public BigInteger readKeys(String keyToRead) {
String fileName = "keys.txt";
String key = keyToRead;
String s1 = "public";
String s2 = "";
BigInteger pK = new BigInteger("0");
try {
Scanner sc = new Scanner(new File(fileName));
if (!key.equals(s1)) {
sc.nextLine();
}
String publicKey = sc.next();
sc.next();
s2 = sc.next();
pK = new BigInteger(s2);
sc.close();
} catch (FileNotFoundException e) {
System.out.println("File not found: "+fileName);}
return pK;
}

/** gibt den PublicKey zurück */

public BigInteger getPublicKey() {
return readKeys("public");
}

/** gibt den PrivateKey zurück */

public BigInteger getPrivateKey() {
return readKeys("private");
}

/** verschlüsselt den SessionKey, welcher als Array von int-Werten eingelesen und als
* Array von BigInteger zurückgegeben wird
*/

public BigInteger[] encryptSessionKey(int[] a) {
BigInteger[] cipher = new BigInteger[16];
for (int i=0; i<a.length; i++) {
BigInteger b = new BigInteger(new Integer(a).toString());
b = b.modPow(publicKey, modulus);
cipher = b;
}
return cipher;
}

/** Gibt einen Array von BigInteger als String aus */

public void ausgabeKey(BigInteger[] b) {
String key = "";
for (int i=0; i<b.length; i++) {
key = key + b.toString();
}
System.out.println(key);
}


public BigInteger[] decryptSessionKey(BigInteger[] a){
BigInteger[] b = new BigInteger[16];
for (int i=0; i<a.length; i++) {
b = a.modPow(privateKey, modulus);
}
return b;
}
}

die andere Klasse hat andere Methoden. Und von beiden Klassen muss ich Methoden in einer dritten Klasse aufrufen können. Und das Interface ist dazu da, um eine gemeinsame Schnittstelle zu schaffen
 

icarus2

Top Contributor
Also so wie ich das jetzt verstanden habe, machen die beiden abstrakten Klassen beide eine Verschlüsselung, allerdings auf verschiedene Art und Weise, ist das richtig?

Ich würde dann die Architektur folgendermassen machen:

Eine abstrakte Klasse, z.B. "Verschlüsselung". Diese enthält konkrete Methoden, die für die meisten konkreten Klassen, die "Verschlüsselung" abgeleitet sind, gleich sind. Zusätlich vielleicht noch ein par abstrakte Methoden, die in jeder Klasse, die etwas verschlüssen kann enthalten sein müssen, aber bei jeder völlig unterschiedlich sind.

Auch dein Interface Schnittstelle implementierst du bereits in die abstrakte Klasse Verschlüsselung (dort musst du die Methoden ja noch nicht überschreiben, da die Klasse abstrakt ist), sodass später jede konkrete Unterklasse dieses implementieren muss.

Die beiden Klassen, die du bis jetzt abstrakt gemacht hattest, würde ich konkret (nicht abstrakt) machen und sie von Verschlüsselung ableiten. Dadurch kannst du diese Klassen auch referenzieren, also Objekte darauf erzeugen.

Dann kansnt du für die 3te Klasse die unterschiedlichen Verschlüsselungen verwenden.

Kurz gefasst:

1.
public abstract class Verschlüsselung implements Schnitstelle {...}

2.
public class A1 extends Verschlüsselung{...}

public class A2 extends Verschlüsselung{...}

3.
public class B {...}

Ich hoffe das ist einigermassen verständlich geschrieben und es hilft dir weiter.
 

Michael...

Top Contributor
Nur mal zum Verständnis: Warum sind die beiden Klassen abstrakt? Damit man keine Objekte von Ihnen erzeugen kann?
 
B

bygones

Gast
Nur mal zum Verständnis: Warum sind die beiden Klassen abstrakt? Damit man keine Objekte von Ihnen erzeugen kann?

ich plaediere schon immer dass es eine compile warnung geben sollte wenn eine abstrakte klasse keine einzige abstrakte methode hat... (oder hab ich was in dem unformatierten code uebersehen ?)

zum verhindern einer instanz gibt es andere moeglichkeiten (private konstruktor etc).

Die Frage bleibt dann weiter (habe aber nicht ganzen beitrag gelesen)... wenn keine instanz erstellt werden soll, warum dann instanzmethoden ?
 

Michael...

Top Contributor
ich plaediere schon immer dass es eine compile warnung geben sollte wenn eine abstrakte klasse keine einzige abstrakte methode hat... (oder hab ich was in dem unformatierten code uebersehen ?)
Hast nichts übersehen, deswegen meinen Frage. Wobei es bei häufiger vorkommt, dass eine abstrakte Klasse keine einzige abstrakte Methode besitzt, z.B. bei Adaptern.
 

sliwalker

Top Contributor
Wenn ich es mir richtig gemerkt habe, hat eine abstrakte Klasse mit nur non-abstract Methoden den Sinn sowohl funktioniell als auch von der Typhierachie einen "Mindeststandard" zu setzen. Der private-Konstruktor hilft Dir bei Reflection wenig. Wenn Du also wirklich verhindern willst, dass keine direkten Instanzen von Deiner Klasse erstellt werden, weil zum Beispiel wichtige Attribute fehlen oder Methoden so unterschiedlich implementiert werden müssen, dass man sie nicht direkt festlegen kann, dann musst Du sie abstrakt halten.
 

andreas2505

Bekanntes Mitglied
Hallo,

die Klassen sollen deswegen abstrakt sein, weil ich ein Interface habe was mehrere Methoden festlegt, die aber nicht von beiden abstrakten Klassen genutzt werden.
Deshalb müssen die Klassen abstrakt sein.
Ich weiß, dass das vermutlich nicht die beste Lösung ist, aber so wurde es gefordert mit zwei Klassen einem Interface und einer Klasse die die Methoden aufruft
 
B

bygones

Gast
bei Interface & 2 abstrakten Klassen wird es schwierig konkret da methoden aufzurufen... auf irgendeinem Weg brauchst du eine "reale" Klasse
 

andreas2505

Bekanntes Mitglied
Ja das ist ja das Problem, aber wie soll ich das machen. Ich hatte erst überlegt exakt die selben Methodennamen für beide "abstrakte" Klassen zu verwenden, dann bräuchte ich sie nicht mehr abstrakt zu machen. Aber das wird nix. Und irgendwie muss es da doch noch ne andere Möglichkeit geben.
 

icarus2

Top Contributor
Eventuell aus dem einen Interface zwei/mehrere machen, sodass sie spezifischer sind.

Ich weiss jetzt nicht wie viele Methoden es sind... aber bei nem KeyListener Interface musst du ja auch immer 3 Methoden überschreiben, obwohl du vielleicht nur eine brauchst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Verwendung jna Java Basics - Anfänger-Themen 15
L Zufälligen Zahlencode, ohne mehrfacher Verwendung einer Ziffer Java Basics - Anfänger-Themen 15
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
A OOP Richtige Verwendung von ArrayList und equals Java Basics - Anfänger-Themen 24
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
H Datentypen Fehler bei Verwendung von enum Java Basics - Anfänger-Themen 9
A Verwendung von Interfaces Java Basics - Anfänger-Themen 7
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
D native Methoden, Verwendung? Java Basics - Anfänger-Themen 8
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
X Array Ausgabe bei Verwendung von 2 Schleifen erklären Java Basics - Anfänger-Themen 8
G verwendung von regex Java Basics - Anfänger-Themen 3
K Problem bei der Verwendung von Gregorian Calender Java Basics - Anfänger-Themen 3
T NullPointerException bei Verwendung einer Klasse einer anderen .jar datei Java Basics - Anfänger-Themen 3
B Wie wichtig ist Verwendung von StringBuffer in Schleifen? Java Basics - Anfänger-Themen 10
B Verwendung von Arrays Java Basics - Anfänger-Themen 2
U Verwendung von Interface Java Basics - Anfänger-Themen 33
A Methoden Verwendung von crypt? Java Basics - Anfänger-Themen 2
D Muss ich eigentlich immer auf die Verwendung des richtigen Datentyps achten? Java Basics - Anfänger-Themen 7
D reg Exp, verwendung des endezeichen "$" Java Basics - Anfänger-Themen 5
C Verwendung von Schleifen? Java Basics - Anfänger-Themen 18
J Datentypen Array - Verwendung im Konstruktor Java Basics - Anfänger-Themen 8
C Verwendung von primitiven Datentypen Java Basics - Anfänger-Themen 8
J Problem mit NullPointerException bei Verwendung eines Arrays Java Basics - Anfänger-Themen 6
D Frage zur Verwendung einer Schnittstelle Java Basics - Anfänger-Themen 4
D Verwendung der Klasse Map Java Basics - Anfänger-Themen 9
C Verwendung von Matrizen in einer Schleife Java Basics - Anfänger-Themen 5
F Umlaute eines Strings entfernen (Verwendung von this?) Java Basics - Anfänger-Themen 2
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
I Verwendung von Constant Field Values Java Basics - Anfänger-Themen 4
J Verwendung von eigenen Klassen in JSP Java Basics - Anfänger-Themen 2
G try. catch Verwendung Java Basics - Anfänger-Themen 11
Z Beispiel Würfelspiel mit Verwendung von Feldern Java Basics - Anfänger-Themen 7
H Verwendung lokaler Einstellungen Java Basics - Anfänger-Themen 4
G getName, substring Verwendung Java Basics - Anfänger-Themen 3
I Fehler bei Verwendung von substring Java Basics - Anfänger-Themen 4
S Verwendung von Super Java Basics - Anfänger-Themen 7
M Verwendung von Robot... wie? Java Basics - Anfänger-Themen 6
M Verwendung von "this" Java Basics - Anfänger-Themen 2
U Liste importieren und für weitere Verwendung sichern Java Basics - Anfänger-Themen 4
feuervogel Integral unter Verwendung der Java-Bibliothek berechnen Java Basics - Anfänger-Themen 10
frau-u Probleme mit richtiger Verwendung von FileInputStream Java Basics - Anfänger-Themen 2
S valueOf() vs. toString() Verwendung??? Java Basics - Anfänger-Themen 13
A Kurze Frage zur Verwendung von this Java Basics - Anfänger-Themen 9
S Verwendung bitweiser Operatoren Java Basics - Anfänger-Themen 6
F Verwendung von this in statischen Kontext nicht möglich Java Basics - Anfänger-Themen 8
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
M Methoden Overloading in abstrakten Klassen Java Basics - Anfänger-Themen 26
F Probleme mit privaten Klassen (abstrakten Klassen) Java Basics - Anfänger-Themen 1
P OOP Sinn von abstrakten Klassen Java Basics - Anfänger-Themen 2
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
G Methode einer Abstrakten Klasse aufrufen Java Basics - Anfänger-Themen 1
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
O Javadoc bei abstrakten Methoden Java Basics - Anfänger-Themen 1
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
G Auf einen bestimmten Konstruktor in der abstrakten Superklasse zugreifen? Java Basics - Anfänger-Themen 2
T Interface implementieren mit Abstrakten Typen? Java Basics - Anfänger-Themen 4
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
T fenster schliesen und mouse events in einer nicht abstrakten klasse Java Basics - Anfänger-Themen 6
Corben Methoden Methode einer Abstrakten Klasse Java Basics - Anfänger-Themen 7
A Deklarationen in abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 11
N finale Attribute in abstrakten Basisklassen Java Basics - Anfänger-Themen 6
T Frage zu Interfaces und Abstrakten Klassen Java Basics - Anfänger-Themen 4
Spin Eigenen Abstrakten Datentypen Java Basics - Anfänger-Themen 28
X Problem: Erben von einer abstrakten Klasse Java Basics - Anfänger-Themen 4
I [Java] Umgang mit abstrakten Klassen, Interfaceklassen (BSP) Java Basics - Anfänger-Themen 12
M Frage zu einer abstrakten Klasse Java Basics - Anfänger-Themen 16
N variablen vom typ einer abstrakten Klasse Java Basics - Anfänger-Themen 5
M instanzieren einer abstrakten Klasse? Java Basics - Anfänger-Themen 2
A Objekte von abstrakten Klassen? Java Basics - Anfänger-Themen 6
M Rückgabetype Unterklasse von einer abstrakten Klasse Java Basics - Anfänger-Themen 3
V Verständnisproblem mit Abstrakten zu Konkreten Klassen Java Basics - Anfänger-Themen 7
S Field einer abstrakten Klasse wird nicht gesetzt Java Basics - Anfänger-Themen 2
T Instanzen von abstrakten Klassen? Java Basics - Anfänger-Themen 14
S Objektrückgabe durch Factory-Methode in abstrakten Klassen Java Basics - Anfänger-Themen 4
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben