Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Статические внутренние классы (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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.