Можем ли мы создать объект для интерфейсов и абстрактных классов? - PullRequest
1 голос
/ 06 июля 2011
f.addMouseMotionListener(new MouseAdapter() {
    public void mouseDragged(MouseEvent e) 
    {
        String s="Mouse dragging :X = "+e.getX()+" Y= "+e.getY();
        tf.setText(s);
    }
    });

я читал, что мы не можем создавать экземпляры объектов для абстрактных классов ... но здесь мы создаем new MouseAdapter() ... кто-то может объяснить, как это делается с этими анонимными классами .. спасибо.

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

Вы не создаете экземпляр MouseAdapter, вы создаете экземпляр анонимного класса, унаследованного от MouseAdapter.

Более подробно, это можно было бы написать:

class Goo extends MouseAdapter { public void mouseDragged(){...} };

f.addMouseMotionListener(new Goo());
0 голосов
/ 06 июля 2011

Вы не видите, это не значит, что этого не произойдет.Просто из кода вы используете новый MouseAdapter () для создания объекта.Однако, если вы попытаетесь прочитать содержимое в файле .class, вы обнаружите, что у внутреннего класса есть имя, обычный случай:

class MouseAdapter$1 extends MouseAdapter

До этого вам следует прояснить все.:)

...