Вернутся на главную

Статические внутренние классы (nested)


Статические внутренние классы (nested) на нашем сайте

Статьи
Статьи для студентов
Статьи для учеников
Научные статьи
Образовательные статьи Статьи для учителей
Домашние задания
Домашние задания для школьников
Домашние задания с решениями Задания с решениями
Задания для студентов
Методички
Методические пособия
Методички для студентов
Методички для преподавателей
Новые учебные работы
Учебные работы
Доклады
Студенческие доклады
Научные доклады
Школьные доклады
Рефераты
Рефератывные работы
Школьные рефераты
Доклады учителей
Учебные документы
Разные образовательные материалы Разные научные материалы
Разные познавательные материалы
Шпаргалки
Шпаргалки для студентов
Шпаргалки для учеников
Другое

В объекте обычно внутреннего класса есть ссылка на объект внешнего класса.

Поэтому мы создаем: obj.newInner();

У статического такой ссылки нет.

Поэтому:

- для его создания не нужен объект внешнего класса.

- из объекта статического внутреннего класса нельзя обращаться к нестатическим членам внешнего (а только к статическим).

- у нестатических внешних классов не может быть статических членов. У статических – могут.

class Outer2 {

static class Inner2{}

public static Inner2 createInner() { return new Inner2(); }

}

Извне

Outer2.Inner2 obj1 = new Outer2.Inner2;//похоже на пакет

Outer2.Inner2 obj2 = new Outer2.createInner();// порождение через метод

Пример: в библиотеке Java2D есть класс Rectangle2D – абстрактный. В нем есть 2 конкретных подкласса:

- внутренние статические;

- наследники внешнего.

Rectangle 2D.Float

Rectangle 2D.Double

Создание:

Rectangle2D.Double d = new Rectangle2D.Double (10.0, 25.0, 22.5, 20.0);

А можно сделать upcasting

Rectangle2D d = new Rectangle2D.Double (10.0, 25.0, 22.5, 20.0);

Пример применения внутренних классов: говорящие часы:

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

import javax.swing.Timer;

class TalkingClock{

private int interval;

private boolean beep;

public TalkingClock (int interval, boolean beep){

this.interval = interval;

this.beep = beep;

}

_________________________________________________________________________

private class TimePrinter implements ActionListener{

public void actionPerformed(ActionEvent event) {

Date now = new Date ();

System.out.println (“The time is ” + now);

if (beep) Toolkit.getDefaultToolkit().beep();

}

}

________________________________________________________________________

public void go (){

ActionListener listener = new TimePrinter ();

Timer t = new Timer (interval, listener);

t.start ();

}

}

________________________________________________________________

public class TalkingClockTest {

public static void main (String [] args) {

TalkingClock clock = new TalkingClock (200, true);

clock.go ();

JoptionPane.showMessageDialog (null, “Quit?”);

System.exit (0);

}

}

Вариант с анонимным внутренним классом

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

import javax.swing.Timer;

class TalkinClock {

public void go( int interval, final boolean beep){

ActionListener listener = new

ActionListener(){

public void ActionPerformed( ActionEvent event ) {

Date now = new Date();

System.out.println( “The time is” + now );

if (beep) Tookit.getDefaultToolkit().beep();

}

};

Timer t = new Timer( interval, listener );

t.start;

}//go()

}

public class AnonymusTalkingClockTest {

public static void main (String [] args) {

TalkingClock clock = new TalkingClock();

clock.go ( 1000, true );

JoptionPane.showMessageDialog( null, “Quit?” );

System.exit (0);

}

}

Тема 11





Название статьи Статические внутренние классы (nested)