вторник, 27 января 2015 г.

toString and COMPOSITION

toString
Объяснить крайне тяжело.
КОД:

public class potpie {
private int month;
private int day;
private int year;

public potpie(int m, int d, int y){
month=m;
day=d;
year=y;
System.out.printf("The constructor for this is %s\n", this);
}
public String toString(){
return String.format("%d/%d/%d", month,day,year);
}
}

class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
}

Результат:

The constructor for this is 4/5/6

COMPOSITION
_________________________________________________________________________________

КОД:

public class potpie {
private int month;
private int day;
private int year;

public potpie(int m, int d, int y){
month=m;
day=d;
year=y;
System.out.printf("The constructor for this is %s\n", this);
}
public String toString(){
return String.format("%d/%d/%d", month,day,year);
}
}
public class tuna {
private String name;
private potpie birthday;

public tuna(String theName, potpie theDate){
name=theName;
birthday=theDate;

}
public String toString(){
return String.format("My name is %s, my birthday is %s", name, birthday);
}
}

class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
tuna tunaObject =  new tuna("Natasha", potObject);
System.out.println(tunaObject);
}
}

Результат:
My name is Natasha, my birthday is 4/5/6

Что тут произошло?
в туне создаем две переменные NAME и BIRTHDAY( Где BIRTHDAY передает референс в  potpie object)
private String name;
private potpie birthday;
создаем метод с двумя аргументами и передаем стринговое значение(куда будет линковаться)
public tuna(String theName, potpie theDate){
name=theName;
birthday=theDate;
создаем toString метод без аргументов
в теле делаем возврат формата %s- это будет fill in name и birthday
public String toString(){
return String.format("My name is %s, my birthday is %s", name, birthday);
}
}
и вот где начинается немного жопа
whenever we need a String representation of this "my name is %s" its gonna look for the second part - name,  то есть оно ищет переменную name- которая указана theName и мы ей дали значение в самом верху  в туне. Но вот с BIRTHDAY нет string representation, birthday is just a reference to theDATE object and this means: since its a refrence to an OBJECT and NOT A STRING , anytime it needs a String from an object , it will go to my class(в примере этот класс potpie) and find a toSTRING METHOD and then i can give you the information you need. ///43 урок
далее идем в apples класс и создаем тунаОбжект- с двумя аргементами (Наташа- name, и potObject( в нашем случае он записан в классе potpie как 4/5/6) и потом выводим обьычным принтом тунаобжект
class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
tuna tunaObject =  new tuna("Natasha", potObject);
System.out.println(tunaObject);
}
}
результат такой:
My name is Natasha, my birthday is 4/5/6









Комментариев нет:

Отправить комментарий