Java Internal Class
1. Что такое внутренняя категория?
Определение одного класса помещается в другой класс, и этот класс называется внутренним классом
2. Каковы характеристики внутренних классов?
1. Внутренний класс по -прежнему является независимым классом. После компиляции внутренний класс будет составлен в независимый файл .class, но ему предшествует имя класса и символ внешнего класса.
2. Внутренние классы не могут быть доступны обычными способами. Внутренний класс является членом внешнего класса, поэтому внутренний класс может свободно получить доступ к переменным элемента внешнего класса, независимо от того, частным или нет.
3. Если внутренний класс объявлен статическим, он не может получить доступ к переменным элемента внешнего класса по желанию. В настоящее время внутренний класс может только получить доступ только к статическим переменным элемента внешнего класса.
3. Каковы внутренние категории?
1. Внутренний класс участника
нравиться:
пакет com.test01; public class a {// внутренний класс B наследует testpojo и реализует интерфейс testinterface класс B Extends testpojo реализует testinterface {// собственный метод внутреннего класса b public void run () {System.out.println («Я работаю!»); } // Перепишите метод интерфейса public void testf () {System.out.println («Реализуйте интерфейс!»); }} // Вызовите внутренний класс public void test () {b b = new b (); b.testf (); // Использование метода rewrite interface b.run (); // Вызовите свой собственный метод b.testpojo (); // Метод вызова наследуя родительский класс} // Тест основного метода публичный статический void main (string [] args) {a a = new a (); a.test (); }} // Определить интерфейс, метод IS testf () интерфейс testinterface {public void testf ();} // определить нормальный метод класса testpojo () class testpojo {public void testpojo () {System.out.println («i Am Am Am Ame Simple Pojo Class»); }} // реализовать, чтобы вызвать методы в внутреннем классе класса Textone {public static void main (string [] args) {ab b = new a (). New b (); // Вызов внутреннего класса B в классе A /** эквивалентен следующему коду* a = new a (); * Ab b = a.new b (); * */ b.testf (); // Использование метода rewrite interface b.run (); // Вызов ваш собственный метод b.testpojo (); // вызов метода, который наследует родительский класс}}2. Метод внутренний класс
пакет com.test01; public class outest {public void test () {// определить метод класс ne {// определить метод внутреннего класса public void fle () {// определить метод внутреннего класса System.out.println («Я летаю!»); }}; new ne (). fle (); // Вызов метода внутреннего класса} public static void main (String [] args) {new outs (). Test (); //Тест}} Примечание. (1) Внутренний класс метода может быть создан только в методе, который определяет внутренний класс и не может быть создан вне этого метода.
(2) Метод внутренний класс объект не может использовать нефинальные локальные переменные метода, где находится внутренний класс.
Поскольку локальные переменные метода находятся на стеке, они существуют только в течение жизни метода. Когда метод заканчивается, его структура стека удаляется.
Местные переменные становятся историей. Однако после завершения метода, объекты внутреннего класса, созданные в методе, все еще могут существовать в куче!
Например, если ссылка на него передается в какой -то другой код и хранится в переменной -члене. Поскольку локальные переменные не могут быть гарантированно иметь такую же долгую жизнь, как и у объектов внутреннего класса метода, объекты внутренних классов не могут их использовать. (Это понимание происходит из энциклопедии Байду)
3. анонимный внутренний класс
1) абстрактные анонимные внутренние классы
пакет com.anonymous; public class AbstractClass {public void test () {// Метод - testa testa a = new testa () {// реализовать Abstract Class @Override public void run () {// реализовать Abstract Class System.out.println («Я использую абстрактный анонимный внутренний класс»); }}; a.run (); // Вызов метода внутреннего класса} public static void main (String [] args) {new AbstractClass (). Test (); // test}} // Определить абстрактный класс Testa Abstract Method Is Run () Abstract Class Testa {public assoic void run ();}2) Анонимный внутренний класс интерфейса
пакет com.anonymous; public class testanonymous {myInterface m = new myInterface () {// реализовать интерфейс public void eat () {// Переписать систему метода интерфейса myInterface.out.println («У меня есть еда!»); }}; public void ss () {// метод ss m.eat (); // Вызовите перезапись метод} public static void main (string [] args) {new Testanonymous (). Ss (); // test}} // Определите метод интерфейса как eatInterface myInterface {public void eat ();}Примечание. Анонимные внутренние классы могут быть определены в методах или в членах класса. Независимо от того, какие анонимные внутренние классы они не могут быть вызваны непосредственно внешними классами.
4. Какова роль внутренних категорий?
Каждый внутренний класс может независимо наследовать от реализации (интерфейс), поэтому унаследовал ли периферический класс определенная реализация (интерфейс), не влияет на внутренний класс. Без способности, предоставляемых внутренними классами, наследовать несколько конкретных или абстрактных классов, некоторые проблемы с дизайном и программированием трудно решить. С этой точки зрения внутренние классы завершают решение множественного наследования.
Интерфейсы решают некоторые проблемы, в то время как внутренние классы эффективно реализуют «множественное наследство».
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!