LINUX.ORG.RU

Java + теоретический вопрос


0

0

public class A{
	interface I{
		void foo();
	}
	class B implements A.I{
		public void foo(){
			System.out.println("Foo!");
		}
	}
	public static void main(String arg[]){
		((new A()).new B()).foo();
	}
}

меня интересует синтаксис создание объекта класса B, в данном случае это выглядит, как вызов метода new у объекта класса А /грубо говоря/. Т.е. new здесь вроде как поле класса А, что никак не лепится с рарезервированностью слова new. Или разработчики явы по-другому просто не придумали :) ? Разъястине, пожалуйста.
★★★★★

Re: Java + теоретический вопрос

http://c2.com/cgi/wiki?InnerClasses В отличие от C++ экземпляр B может существовать только в контексте экземпляра родительского класса А. Что касается синтаксиса, то видимо разработчики выбрали именно такой странным способ явного указания родителя, если экземпляр внутреннего класса создается там, где A.this недоступно (в данном случае статическая функция)

anonymous ()

Re: Java + теоретический вопрос

Кроме того, если верить грамматике (файл 1.3Mb)
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/java/parse.y?rev=1.475&content
-type=text/x-cvsweb-markup 
то конструкции вида 

A.B b = a.new B();

являются специальными хаками в синтаксисе (см. нетерминалы 
class_instance_creation_expression и something_dot_new)

anonymous ()
Ответ на: Re: Java + теоретический вопрос от anonymous

Re: Java + теоретический вопрос

>являются специальными хаками в синтаксисе

угу, в статик методе подругому фуу не вызвать.

Pi ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.