2015-01-16 3 views
0

Я практикую делает GUI в NetBeans и наткнулся на этот автомобиль сгенерированный кодРазличные способы создания классов?

saveButton.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mousePressed(java.awt.event.MouseEvent evt) { 
       saveButtonMousePressed(evt); 
      } 

Я просто запутался в аргументе «новый java.awt.event.MouseAdapter()». Я знаю, что когда мы используем ключевое слово new, мы создаем объект этого класса. Но после этого «нового» заявления он объявил метод, поэтому мое восприятие заключалось в том, что «объект с методом?» Я знаю, что мы создаем объект, чтобы мы могли использовать методы, которые не создают в них метод ».

После изучения и чтения о внутренних классах у меня теперь есть другая перспектива.

Возможно ли создать класс в аргументе с «новым» утверждением? если true, то этот код не создал объект, а вместо этого создал класс.

Если мой вывод будет правильным, есть два способа (я знаю, до сих пор) создавать классы в java.

  1. помощью,

    public clas Sample() { 
    
    //insert methods here 
    
    } 
    
  2. и с помощью,

    public void getSomething(new Sample() { //insert method here }) 
    

ли я получить это одно право? Я просто новичок в java (Self Study).

+0

Я не могу сказать, что вы здесь задаете. – immibis

ответ

1

Это не совсем другой способ создать class, на самом деле вы определяете его так же, как и с любым другим классом, но вы его не называете, это просто специализированный MouseAdapter.

Что на самом деле происходит, так это то, что вы определяете специализированную версию mousePressed без необходимости связывать ее с именованным подклассом MouseAdapter. Это похоже на определение и использование класса в той же точке. Вы определяете конкретный класс с определенным поведением и создаете его.

Действительно, это называется anonymous class. Это не имеет ничего общего с inner class, который является классом, который определен внутри другого класса (поэтому они вложены).

+0

Фактически, анонимный класс, определенный на уровне экземпляра, т. Е. Не в объявлениях, методах или блоках статического поля, будет вести себя как внутренний класс экземпляра, созданного им. Поэтому он имеет доступ к методам и полям экземпляра внешнего класса. Когда есть двусмысленность, вы можете использовать 'Outer.this.someMethod()'. –

Смежные вопросы