Добрый день! Помогите разобраться с проблемой, ну точнее с тем, что я не могу понять.......
Читаю книгу "Философия Java" главу про внутренне классы и дошел до такого момента.
interface Dest3{
String readLable();
}
class Parcel10{
public Dest3 dest3(final String dest, final double price){
return new Dest3() {
private double cost;
{
cost = Math.round(price);
if (cost>100) System.out.println("TO MATCH!!!");
}
private String lable = dest;
@Override
public String readLable() {
return lable;
}
};
}
Ниже поясняется, что ... по сути инициализатор экземпляра является конструктором для анонимного внутреннего класса. Конечно, эта модель имеет свои ограничения; инициализаторы экземпляров не могут перегружаться, поэтому такой "конструктор" может быть только один.
Я попробовал написать перегрузку подобного метода
public Dest3 dest2 (final int i, final double d){
return new Dest3() {
private int z = i;
private double y = d;
private double sum;
{
sum = z+y;
}
@Override
public String readLable() {
return "Ower"+" "+sum;
}
};
}
public Dest3 dest2 (final int i, final double d, final int q){
return new Dest3() {
private int z = i;
private double y = d;
private int a = q;
private double sum;
{
sum = z+y+a;
}
@Override
public String readLable() {
return "Ower"+" "+sum;
}
};
}
public Dest3 dest2 (final int i, final double d, final int q,final int p){
return new Dest3() {
private int z = i;
private double y = d;
private int a = q;
private int o = p;
private double sum;
{
sum = z+y+a+p;
}
@Override
public String readLable() {
return "Ower"+" "+sum;
}
};
}
Все прекрасно перегружается....
public class Ch10Semple6 {
public static void main(String[] args) {
Parcel10 parcel10 = new Parcel10();
//Dest3 d = parcel10.dest3("USA",200);
Dest3 owe1 = parcel10.dest2(10,20.5,15);
Dest3 owe2 = parcel10.dest2(10,30.5);
System.out.println(owe1.readLable());
System.out.println(owe2.readLable());
Объясните, пожалуйста, новичку, в чем я не прав..... почему автор пишет, что инициализаторы не перегружаются.