Вложенные (nested) классы Java

Если не существует необходимости в связи объекта внутреннего класса с объектом внешнего класса, то есть смысл сделать такой класс статическим.

Вложенный класс логически связан с классом-владельцем, но может быть использован независимо от него.

При объявлении такого внутреннего класса присутствует служебное слово static, и такой класс называется вложенным (nested). Если класс вложен в интерфейс, то он становится статическим по умолчанию. Такой класс способен наследовать другие классы, реализовывать интерфейсы и являться объектом наследования для любого класса, обладающего необходимыми правами доступа. В то же время статический вложенный класс для доступа к нестатическим членам
и методам внешнего класса должен создавать объект внешнего класса, а напрямую имеет доступ только к статическим полям и методам внешнего класса. Для создания объекта вложенного класса объект внешнего класса создавать нет необходимости. Подкласс вложенного класса не способен унаследовать возможность доступа к членам внешнего класса, которыми наделен его суперкласс.

/* пример # 13 : вложенный класс: Ship.java : RunnerShip.java */

package chapt06;

public class Ship {

private int id;

// abstract, final, private, protected – допустимы

public static class LifeBoat {

public static void down() {

System.out.println("шлюпки на воду!");

}

public void swim() {

System.out.println("отплытие шлюпки");

}

}

}

package chapt06;

public class RunnerShip {

public static void main(String[] args) {

// вызов статического метода

Ship.LifeBoat.down();

// создание объекта статического класса

Ship.LifeBoat lf = new Ship.LifeBoat();

// вызов обычного метода

lf.swim();

}

}

Статический метод вложенного класса вызывается при указании полного относительного пути к нему. Объект lf вложенного класса создается с использованием имени внешнего класса без вызова его конструктора.

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

/* пример # 14 : класс вложенный в интерфейс: Faculty.java : University.java */

package chapt06;

public interface University {

int NUMBER_FACULTY = 20;

class LearningDepartment {// static по умолчанию

public int idChief;

public static void assignPlan(int idFaculty) {

// реализация

}

public void acceptProgram() {

// реализация

}

}

}

Такой внутренний класс использует пространство имен интерфейса.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100