JavaのGUIのイベント処理でよく見るプログラム

...addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent e) {
p = e.getPoint();
repaint();
}
}...

で、newされたMouseListerのメソッドで 外部のインスタンス変数をアクセスできるということを今日初めて知った。便利ではあるが一体どういう理屈だ?MouseLister(インターフェース)型のオブジェクトが作れたりそれにメソッドを定義できるのも変な話だな。なんか知らない話があるなぁ。