a)
Test t1=new Test();
Делая это, вы создаете объект класса Test, вызывая конструктор по умолчанию
b)
Test t2=new Test(){ };
Делая это, вы создаете объект класса, который расширяет тестовый класс, этот класс не имеет имени и, следовательно, называется «Анонимный внутренний класс», например.
Test t2=new Test(){
// this is the body of the anonymous(un-named) class
//you can overide the method foo() here
// you can write more methods here but you will not be able to call them
// for example
public void doSomething(){}
};
doSomething() недоступен снаружи, так как t2, т.е. ссылка (указатель) на этот объект (объект анонимного внутреннего класса, который расширяет Test), понимает только метод foo(), поскольку он является ссылкой родительского класса
doSomething() можно вызвать, только если вы сделаете это
Test t2= new Test(){
public void foo()
{
doSomething();
}
public void doSomething(){
System.out.println("Do Something");
}
};
то есть явно вызывать doSomething() в foo(), а foo() доступен снаружи
t2.foo();
Примечание. Пожалуйста, напишите имя класса правильно, первая буква класса должна быть заглавной, например
public class Test{}
Когда вы начнете писать огромные куски кода, это поможет вам и другим, поскольку сделает ваш код читабельным.
person
Oliver
schedule
05.03.2014
t1.x+" "t2.x
вt1.x+" "+t2.x
, он отлично скомпилируется. - person JB Nizet   schedule 04.03.2014C#
. - person Dims   schedule 05.03.2014