Einführung  
  
  
  in die objektorientierte Programmierung 
Aufgabe 1
class LinkedList1618<ET> {
  private Entry header = new Entry(null, null, null);
  private int size = 0;
  public LinkedList1618() {
    header.next = header;
    header.previous = header;
  }
  public ET getLast() {
    if (size == 0) throw new java.util.NoSuchElementException();
    return header.previous.element;
  }
  public ET removeLast() {
    Entry lastEntry = header.previous;
    if (lastEntry == header) throw new java.util.NoSuchElementException();
    lastEntry.previous.next = lastEntry.next;
    lastEntry.next.previous = lastEntry.previous;
    size--;
    return lastEntry.element;
  }
  public void addLast(ET e) {
    Entry newEntry = new Entry(e, header, header.previous);
    header.previous.next = newEntry;
    header.previous = newEntry;
    size++;
  }
  
  public int size() {
    return size;
  }
  private class Entry {
    private ET element;
    private Entry next;
    private Entry previous;
    private Entry(ET element, Entry next, Entry previous) {
      this.element = element;
      this.next = next;
      this.previous = previous;
    }
  }
  public class ListIterator {
    private int nextIndex = 0;
    private Entry next = header.next;
    boolean hasNext() {
      return nextIndex != size;
    }
    ET next() {
      if (nextIndex == size) throw new java.util.NoSuchElementException();
      ET elem = next.element;
      next = next.next;
      nextIndex++;
      return elem;
    }
  }
  public ListIterator listIterator() {
    return new ListIterator();
  }
}
Aufgabe 2
class MaximumContainer<T extends Comparable<T>>{
  T max;
  
  public void store(T o){
    if (max==null || max.compareTo(o)<0) {
      max=o;
    } // end of if
  }
  
  public T get(){
    return max; 
  }
  
  public static void main(String[] args){
    MaximumContainer<Obst> m= new MaximumContainer<Obst>();
    
    Apfel a= new Apfel(3);
    m.store(a);
    System.out.println(m.get().gewicht);
    
    Birne b= new Birne(10);
    m.store(b);
    System.out.println(m.get().gewicht);
    
    a= new Apfel(5);
    m.store(a);
    System.out.println(m.get().gewicht);
    
  }
  
}
abstract class Obst implements Comparable<Obst>{
   final int gewicht;
  
  Obst(int gewicht){
    this.gewicht= gewicht;
  }
  
  public int compareTo(Obst o){
    return this.gewicht-o.gewicht;
  }
  
  
}
class Apfel extends Obst{
  Apfel(int gewicht){
    super(gewicht);
  }
  
}
class Birne extends Obst{
  Birne(int gewicht){
    super(gewicht);
  }
  
}
Aufgabe 3
 
import java.io.*;
interface AddressBook extends Serializable{
   void addPerson(Person person);
   void print();
   }
class AddressBookException extends Exception {
  AddressBookException(String message) {
    super(message);
  }
}
class ArrayListAddressBook implements AddressBook {
  private java.util.ArrayList<Person> persons;
  public ArrayListAddressBook(int initialCapacity) {
    initialCapacity = initialCapacity < 1 ? 1 : initialCapacity;
    persons = new java.util.ArrayList<Person>(initialCapacity);
  }
  @Override
  public void addPerson(Person person) {
    persons.add(person);
  }
  @Override
  public void print() {
    for (Person person : persons) {
      System.out.println(person.getName());
    }
  }
  
  static public void main(String[] args){
    ArrayListAddressBook ab= new ArrayListAddressBook(3);
    ab.addPerson(new Person("Hans"));
    ab.addPerson(new Person("Ute"));
    ab.addPerson(new Person("Bernd"));
    
    SerializationToFilePersistence speicher= 
    new SerializationToFilePersistence();
    
    //    try{
    //      speicher.storeBook(ab,"adressen1");
    //      
    //    }
    //    catch(AddressBookException e){
    //      System.out.println(e );
    //    }
    
    AddressBook gelesen=null;
    
    try{
      gelesen = speicher.loadBook("adressen1");
      
    }
    catch(AddressBookException e){
      System.out.println(e );
    }
    
    gelesen.print();
    
  }
}
interface FullPersistence {
  AddressBook loadBook(String name) throws AddressBookException;
  void storeBook(AddressBook book, String name) throws AddressBookException;
}
import java.io.*;
class Person implements Serializable{
   private String name;
   public Person(String name) {
   this.name = name;
   }
   public String getName() {
   return name;
   }
   }
import java.io.*;
class SerializationToFilePersistence implements FullPersistence{
   
   public AddressBook loadBook(String name) throws AddressBookException {
   try{
   InputStream is = new FileInputStream(name);
   ObjectInputStream ois = new ObjectInputStream(is);
   AddressBook ab = (AddressBook) ois.readObject();
   ois.close();
   return ab;
   }
   catch(Exception e){
   throw new AddressBookException("Datei nicht gefunden");
   }
   
   }
   
   public void storeBook(AddressBook book, String name) throws AddressBookException{
   try{
   OutputStream os = new FileOutputStream(name);
   ObjectOutputStream oos = new ObjectOutputStream(os);
   oos.writeObject(book);
   oos.close();
   
   }
   catch(Exception e){
   throw new AddressBookException("Datei nicht gefunden");
   } 
   }
   
   } 
 
Ausnahmen
 
public class KeinKaffeeException extends Exception {
  private double restMenge;
  KeinKaffeeException(double kaffeeMenge ) {
    restMenge = kaffeeMenge;
  }
  public double getRestMenge() {
    return restMenge;
  }
}
public class KaffeeMaschine {
  private int speicher;
  
  void fuellenFilter(double benoetigteMenge)
  throws KeinKaffeeException {
    double restMenge = speicher;
    if(restMenge < benoetigteMenge) {
      throw new KeinKaffeeException(restMenge);
    }
    
  }
  
  public static void main(String[] args){
    KaffeeMaschine k= new KaffeeMaschine();
    k.speicher=4;
    try{
      k.fuellenFilter(10);
    }
    catch(KeinKaffeeException e){
      System.out.println("Kaffee reicht nicht");
    }
  }
}
Parametrische Polymorphie
 
class Person{
  String name;
  
  Person(String n){
    name=n;
  }
  
  Person(){
  }
  
}
class Student extends Person{
  String name;
  
  Student(String n){
    name="Name "+n;
  }
  
}
class Container<T extends Person & String>{
  
  T objekt;
  
  Container(T o){
    objekt=o;
  }
  
  public static void main(String[] args){
    
    Student p= new Student("Ute");
    Container<Student> c = new Container<Student>(p);
    
  }
}