Java Inner Class, аналогичная концепция также встречается в C ++, то есть вложенном классе. На первый взгляд, внутренние классы могут показаться немного избыточными, и их полезность может быть не такой важной для начинающих, но с глубоким пониманием этого вы обнаружите, что дизайнеры Java действительно хорошо намерены во внутренних классах. Обучение использованию внутренних классов является частью освоения расширенного программирования Java, что позволяет вам более элегантно разрабатывать структуру вашей программы. Следующие аспекты представлены следующие:
Первая встреча
Содержание публичного интерфейса {int value ();} public interface destination {string readlabel ();} public class goods {Содержание частного класса реализует содержание {private int i = 11; public int value () {return i; }} Защищенный класс Gdestination реализует Destination {Private String Label; Private Gdestination (String Wheseto) {label = whereTo; } public String readlabel () {return label; }} public destination dest (String s) {return new Gdestination (s); } public Contents content () {return new Content (); }} class testgoods {public static void main (string [] args) {Govel P = new Goals (); Содержание C = P.Cont (); Пункт назначения d = p.dest ("Пекин"); }}В этом примере содержание классов и Gdestination определяются внутри товаров класса и имеют защищенные и частные модификаторы соответственно для контроля уровня доступа. Содержание представляет содержание товаров, в то время как Gdestination представляет пункт назначения товаров. Они реализуют два интерфейса содержимого и назначение соответственно. В основном методе ниже используйте содержимое C и пункт назначения D непосредственно для работы, и вы даже не видите имена этих двух внутренних классов! Таким образом, отражается первое преимущество внутренних классов - укрытие операций, которые вы не хотите, чтобы другие знали, то есть инкапсуляция.
В то же время мы также обнаружили первый метод получения объектов внутреннего класса вне объема внешнего класса, то есть для использования методов его внешнего класса для создания и возврата. Вот как делают методы продолжения () и dest () в приведенном выше примере. Так есть ли другой способ? Конечно, формат синтаксиса выглядит следующим образом:
OUTEROBject = новый Overclass (параметры конструктора); outterclass.innerclass innerobject = overbject.new innerclass (параметры конструктора);
Обратите внимание, что при создании нестатических объектов внутреннего класса вы должны сначала создать соответствующие объекты внешнего класса. Что касается причины, это также приводит к нашей следующей теме-
Нестатические объекты внутреннего класса имеют ссылки на их объекты внешнего класса
Небольшая модификация примера прямо сейчас:
Общедоступный класс товары {private valuer = 2; Контент частного класса реализует содержимое {private int i = 11*valuerate; public int value () {return i; }} Защищенный класс Gdestination реализует Destination {Private String Label; Private Gdestination (String Wheseto) {label = whereTo; } public String readlabel () {return label; }} public destination dest (String s) {return new Gdestination (s); } public Contents content () {return new Content (); }}Модифицированная часть показана красным. Здесь мы добавляем переменную частного участника Valuerate к классу товаров, что означает коэффициент стоимости товара. Умножьте его, когда значение метода внутреннего содержимого класса () вычисляет значение. Мы обнаружили, что значение () может получить доступ к Valuerate, что также является вторым преимуществом внутренних классов - объект внутреннего класса может получить доступ к содержанию внешнего объекта класса, который его создал, даже включая частные переменные! Это очень полезная функция, которая предоставляет нам больше идей и ярлыков при разработке. Чтобы реализовать эту функцию, объект внутреннего класса должен иметь ссылку на объект внешнего класса. Когда компилятор Java создает внутренний объект класса, он косвенно передает ссылку на свой внешний класс объект и сохраняет его все время. Это позволяет объектам внутренних классов всегда получать доступ к своим внешним классовым объектам, поэтому в первую очередь необходимо создать внешний объект класса.
Некоторые люди могут спросить, что, если переменная -член во внутреннем классе такая же, как и переменная -член во внешнем классе, то есть переменная -член с тем же именем во внешнем классе заблокирована? Все в порядке, Java использует следующий формат для выражения ссылок на внешние классы:
overclass.this
С ним мы не боимся таких блокирующих ситуаций.
Статический внутренний класс
Как и обычные занятия, внутренние классы также могут быть статичными. Однако, по сравнению с нестатическими внутренними классами, разница в том, что статические внутренние классы не имеют ссылок на внешнюю часть. На самом деле это очень похоже на вложенные классы в C ++. Самая большая разница между внутренними классами Java и вложенными классами C ++ заключается в том, есть ли ссылки на внешнюю. Конечно, есть разница с точки зрения дизайна и некоторых деталей.
Кроме того, в любом нестатическом внутреннем классе не может быть статических данных, статических методов или другого статического внутреннего класса (внутренний класс может быть вложенным более одного слоя). Тем не менее, статические внутренние классы могут иметь все это. Это также второе различие между ними.
Местные внутренние классы
Да, внутренние классы Java также могут быть локальными, и они могут быть определены в методе или даже в кодовом блоке.
открытый класс Goals1 {Public Destination Dest (String S) {Class Gdestination реализует назначение {частная строка метка; Private Gdestination (String Wheseto) {label = whereTo; } public String readlabel () {return label; }} вернуть новое Gdestination (S); } public static void main (string [] args) {good1 g = new Goals1 (); Пункт назначения D = G.Dest ("Пекин"); }}Это пример выше. В методе Dest мы определяем внутренний класс, и, наконец, этот метод возвращает объект этого внутреннего класса. Это можно сделать, если нам нужно только создать один из его объектов и создать его снаружи при использовании внутреннего класса. Конечно, внутренние классы, определенные в методах, могут диверсифицировать проекты, и цель не только в этом смысле.
Вот более странный пример:
public class Goold2 {private void InternalTracking (Boolean B) {if (b) {Class TrackingsLip {private String Id; TrackingsLip (String S) {id = s; } String getSlip () {return id; }} TrackingsLip ts = new TrackingsLip ("Slip"); String s = ts.getslip (); }} public void track () {InternalTracking (true); } public static void main (string [] args) {Goald2 g = new Goals2 (); g.track (); }}Вы не можете создать объект этого внутреннего класса за пределами IF, потому что это за пределами его сферы. Тем не менее, при компиляции внутренний класс отслеживает, составлена одновременно с другими классами, но он недействителен, если он превышает этот объем из -за своего собственного объема. Кроме того, это ничем не отличается от других внутренних классов.
Анонимный внутренний класс
Синтаксические правила анонимных внутренних классов Java выглядят немного странно, но, как и анонимные массивы, если вам нужно только создать объект класса и не может использовать его имя, использование внутреннего класса может сделать код кратким и ясным. Его синтаксические правила следующие:
new Interfacename () {......}; или new SuperClassName () {......};Давайте продолжим привести пример:
public class tovels3 {public contents content () {return new contents () {private int i = 11; public int value () {return i; }}; }}Здесь метод cont () использует анонимный внутренний класс, чтобы непосредственно возвращать объект, который реализует класс содержимого интерфейса, который выглядит очень кратко.
В анонимном адаптере для обработки событий в Java широко используются анонимные внутренние классы. Например, когда вы хотите закрыть окно, добавьте этот код:
frame.addwindowlistener (new windowdapter () {public void windowclose (windowEvent e) {System.Exit (0);}});Отнесее отметить, что, поскольку у анонимного внутреннего класса нет имени, у него нет конструктора (но если этот анонимный внутренний класс наследует родительский класс, который содержит только конструктор с аргументами, вы должны принести эти параметры при его создании и использовать супер -ключевое слово, чтобы вызвать соответствующий контент во время процесса реализации). Если вы хотите инициализировать его переменные члена, есть несколько способов:
Если это анонимный внутренний класс метода, вы можете использовать этот метод для передачи нужных параметров, но помните, что эти параметры должны быть объявлены окончательными.
Реформировать анонимный внутренний класс в названный локальный внутренний класс, чтобы он мог иметь конструктор.
Используйте блоки кода инициализации в этом анонимном внутреннем классе.
Зачем нужны внутренние занятия?
Каковы преимущества внутренних классов Java? Зачем нужны внутренние занятия?
Во -первых, давайте приведем простой пример. Если вы хотите реализовать интерфейс, но один метод в этом интерфейсе имеет одинаковое имя и параметры, что и один метод в классе, который вы представляете, что вы должны делать? В настоящее время вы можете создать внутренний класс для реализации этого интерфейса. Поскольку внутренний класс доступен для всего содержимого внешнего класса, это может выполнить все функции, которые вы напрямую реализуете этот интерфейс.
Но вам, возможно, придется задаться вопросом, разве это не достаточно, чтобы изменить метод?
Действительно, действительно неубедительно использовать это в качестве причины для разработки внутренних категорий.
Реальная причина заключается в том, что внутренние классы и интерфейсы в Java объединяются, чтобы решить проблему, на которую часто жалуются программисты C ++ - наследство больше нет. Фактически, мульти-индивидуальность C ++ очень сложна для проектирования, и Java может достичь влияния мульти-индивидуализации посредством внутренних классов и интерфейсов.
Java внутреннее класс
(1) Нестатический внутренний класс, определенный между методами:
● Периферийные и внутренние классы могут получить доступ к своим частным членам друг от друга.
● Статические переменные элемента не могут быть определены во внутреннем классе.
Из объема внешнего класса, чтобы создать внутренний объект класса, сначала необходимо создать его внешний класс объект
(2) Статический внутренний класс, определенный между методами:
● Доступ только к статическим членам внешних классов можно получить.
Статический внутренний класс не имеет ссылок на внешнюю
(3) Локальный внутренний класс, определенный в методе:
● Этот внутренний класс не имеет никаких разрешений на контроль доступа
● Периферийный класс не может увидеть локальный внутренний класс в методе, но локальный внутренний класс может получить доступ к любому члену периферийного класса.
● Доступ к локальным внутренним классам можно получить в организме метода, но оператор доступа должен быть после определения локальных внутренних классов.
● Локальные внутренние классы могут получить доступ только к константам в теле метода, то есть члены, измененные с помощью окончательного.
(4) Анонимный внутренний класс, определенный в методе:
● Не существует конструктора, вместо этого передавая параметры конструктора в суперклассский конструктор
Если вам нужно только создать объект класса и не использовать его имя, использование анонимных внутренних классов может сделать код кратким и ясным.
Вышеупомянутая статья полностью понимает внутренние и анонимные классы в Java - это весь контент, которым я поделился с вами. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.