What is going on here?      
Java Source

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;

interface S {
   public int getN();
   public void setN(int n);
}

abstract class B implements S {
   public int n;
   public B () { n = 5; }
   public int getN () { return n; }
}

abstract class C implements S {
   public int n;
   public C (int n) { this.n = n; }
   public int getN () { return n; }
}

class D implements S {
   public int n;
   public D () { n = 5; }
   public int getN () { return n+2; }
   public void setN (int n) { this.n = n+2; }
}

class A {
   Inner inner;

   public A (Inner inner) { this.inner = inner; }

   B b = new B() {  public void setN (int n) { this.n = n; } };
        
   // Yikes!
   // Two different type objects of the same class allowed!!
   // Yikes!
   B b1 = new B() {  public void setN (int n) { this.n = n+1; } };
        
   C c = new C(16) {  public void setN (int n) { this.n = n+1; } };
      
   D d = new D() {  public int getN () { return n+3; }  };
        
   public void doit () {
      b.setN(10);
      inner.text.append(b.getN()+" "+b1.getN()+" "+c.getN()+" "+d.getN()+"\n");
   }
}

public class Inner extends Applet implements ActionListener {
   JTextArea text;
   JButton button;

   public void init () {
      setLayout(new FlowLayout());
      add(new JScrollPane(text = new JTextArea(6,30)));
      add(button = new JButton("Press Me"));
      button.addActionListener(this);
      setBackground(new Color(255,255,223));
      text.setFont(new Font("TimesRoman", Font.PLAIN, 18));
   }

   public void actionPerformed (ActionEvent evt) { (new A(this)).doit(); }
}