Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Внутренние классы. Доступ к полям внешнего класса. Создание объекта внутреннего класса




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

Java позволяет определять класс внутри другого класса. Такие классы называют вложенными классами. Область определения вложенного класса ограничена областью определения внешнего класса. Таким образом, если класс В определен внутри класса А, класс В не может существовать независимо от класса. А- Вложенный класс имеет доступ к членам, в том числе приватным, класса, в который он вложен. Однако внешний класс не имеет доступ к членам вложенного класса. Вложенный класс, который объявлен непосредственно внутри области определения своего внешнего класса, является его членом. Можно также объявлять вложенные классы, являющиеся локальными для блока.

Существует два типа вложенных классов: статические и нестатические. Статический вложенный класс — класс, к которому применен модификатор static. Поскольку он является статическим, он должен обращаться к своему внешнему классу посредством объекта. То есть он не может непосредственно ссылаться на члены своего внешнего класса. Из-за этого ограничения статические вложенные классы используются редко.

Наиболее важный тип вложенного класса — внутренний класс. Внутренний класс — это нестатический вложенный класс. Он имеет доступ ко всем переменным и методам своего внешнего класса и может непосредственно ссылаться на них так же, как это делают остальные нестатические члены внешнего класса.

Доступ к полям внешнего класса

 

interface Selector { public boolean end(); public Object current(); public void next(); } public class Sequence { private Object[] items; private int  next; public Sequence(int size) { SequenceSelector s = new SequenceSelector(); items=new Object[size]; } public void add(Object obj) {    if (next < items. length) items[next++]=obj; } public Selector selector() { return new SequenceSelector(); } private class SequenceSelector implements Selector {    private int i=0;    public boolean end() { return i==items. length; }    public Object current() { return items[i]; }    public void next() {        if (i < items. length) i++;    } }  

 

public class DotThis { void funk () { System. out. println(" DotThis. funk()" ); } Inner inner() { return new Inner(); } private class Inner {    public DotThis outer() { return DotThis. this; } } public static void main(String[] args) {    DotThis    dt = new DotThis();    DotThis. Inner dtin = dt. inner();    dtin. outer(). funk(); } }  

Создание объекта внутреннего класса

public class DotNew { class Inner {       void printHello() { System. out. println(" Hell from Inner! " ); } } public static void main(String[] args) {     DotNew    dn = new DotNew();     DotNew. Inner dnin = dn. new Inner();     dnin. printHello(); } }

package app22. pkg1;   import java. io. File; import java. io. FileFilter;   public class MyFilter1 implements FileFilter{   public boolean accept(File file) {    return file. getName(). endsWith(". xml" ); }    }
package app22. pkg1; import java. io. *; public class App221 {   public static void main(String[] args) {    // TODO code application logic here    //распечатать список файлов в текущем каталоге    File dir = new File(". " );    //File []files= dir. listFiles();    //File []files= dir. listFiles(new MyFilter1());    File []files= dir. listFiles(new FileFilter() {        public boolean accept(File file) {           //это анонимный класс            return file. isDirectory();        }    });    for(File f: files)        System. out. println(f); }     }

Программируя мы часто сталкиваемся с необходимостью ограничить множество допустимых значений для некоторого типа данных. Так, например, день недели может иметь 7 разных значений, месяц в году - 12, а время года - 4. Для решения подобных задач во многих языках программирования со статической типизацией предусмотрен специальный тип данных - перечисление (enum). В Java перечисление появилось не сразу. Специализированная языковая конструкция enum была введена начиная с версии 1. 5. До этого момента программисты использовали другие методы для реализации перечислений.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...